代码之家  ›  专栏  ›  技术社区  ›  Dan Rosenstark

为什么以及何时使用shell而不是ruby[关闭]

  •  18
  • Dan Rosenstark  · 技术社区  · 14 年前

    因为我熟悉Ruby,所以我将使用它在OSX上编写一些脚本。但后来我想,也许我错过了船。我知道有很多理由比bash(或者其他兼容sh的命令语言解释器)更喜欢Ruby,但我不知道有什么理由不喜欢。直接编程shell有什么好处?

    我打算利用系统命令 system 必要时。

    注: 我已经知道Ruby不会一直存在,但我对大多数技术、语义和语法标准感兴趣。

    Ruby并不总是在那里,我的意思是它不是所有*nix发行版的标准部分,不像 vi .

    8 回复  |  直到 11 年前
        1
  •  21
  •   S.Lott    14 年前

    shell的编程语言对所有人来说都很糟糕,只有一件事。

    管道。

    Shell的管道编程语言完全是Rocks。

    这个 | , & ; 运算符,加上 () 和``形成一个整洁的小语言来描述管道。

    a & b 同时

    a ; b 是顺序的

    a | b 是一条输送B的管道吗?

    Shell编程的那一部分很震撼。

    想想 ( a & b & c ) | tee capture | analysis 作为一种很难用Python(或Ruby)表达的东西。你可以用 iterpipes 但不是全部。

    剩下的大部分你可以不使用,使用python(或ruby),你会更快乐,更有效率。

    最需要注意的是 expr 在外壳层。一旦你开始尝试做“计算”,你就跳出了shell的最佳位置,你应该停止在shell中编程,重新思考你在做什么。

        2
  •  6
  •   Shadowfirebird    14 年前

    鲁比有一个巨大的优势:你了解鲁比,而且(我想)你不太了解巴什!

    我个人用Ruby编写复杂的脚本,用Bash编写简单的脚本——对我来说,断点通常是任何具有适当命令行参数集的东西——但是,我同时知道Bash和Ruby。

    我建议您对任何足够简单的东西使用bash,这样您就可以事先在命令行上解决它,例如:

    who |grep -i admin |cut -c10-20 
    

    --用红宝石做其他的东西

        3
  •  2
  •   Joakim Elofsson    14 年前

    bash的核心功能是运行其他命令行应用程序。使这些程序相互交互等等。这不是Ruby的设计目的(对吗?).

        4
  •  2
  •   DigitalRoss    14 年前

    直接编写posix或bash脚本对于循环文件列表的操作很好。诸如此类

    find . -name \*.htm | while read x; do
       # whatever
    done
    

    shell可以很好地完成命令替换和简单的参数转换。shell程序允许相当复杂的程序合理地模块化。

    当需要某种内部数据结构时,会发生到类似Ruby的转换。shell是一个宏处理器,因此它能够像“元编程”那样,在那里组成变量名。有些版本的bash有数组,所有版本都可以“metaprogram”变量名,其中索引是名称的一部分。

    但它是100%黑客,甚至内置阵列都是粗糙的。一旦必须做出决定并保留数据结构,就应该切换到Ruby了。

        5
  •  1
  •   Earlz    14 年前

    我看不出鲁比有什么问题。你可以用反勾号代替 system 像这样插入东西

    `cp ${source} ${dest}` 
    

    此外,您可以很容易地获取stdout的内容(不确定stdin的内容),并形成自己的小管道。

    我认为Ruby在编写脚本方面是一个胜利,但作为一个普通的shell,它更不容易做到这一点,因为它总是需要记住在执行命令时放回节拍。

        6
  •  1
  •   ezpz    14 年前

    关于Shell如何处理管道的注释是现场显示的。 然而,如果你对贝壳的红色方法感兴趣,你可能会看到 rush . 现在有一些即时的观察(管道处理方式之外的观察),比如路径处理方式完全不同,但是如果您想要的是Ruby的易用性,比如迭代器和块,那么您可以很方便地使用它们。

    在任何情况下都可能不是完全的替代品,但它可能符合您的目的。

    [编辑] 一个快速的环顾四周出现 ipython 它(粗略地一瞥)能给你更多的贝壳环境的自然感觉,而贝壳环境对你来说可能是一种激励,也可能不是一种激励。

        7
  •  1
  •   ghostdog74    14 年前

    @如果您想比较Ruby和Shell,可以使用Ruby的解释器(不带库/模块)进行比较。把它的内部结构和外壳比较一下。否则,他们是 几乎 相同的。为什么?例如,如果您想进行shell提供的以外的高级数学,shell可以使用bc/awk/dc。这些是shell的数学“库”。如果需要日期结构(如关联数组),可以使用awk。(相当于Ruby中的hashes)。在现代的bash shell中,也有关联数组。您可以将*nix外部工具(例如wc、grep、sed等,以及/usr/bin/、/usr/s bin等中的工具)视为shell的“库”。

    最后,如果您打算在Ruby中大量使用System(),我建议您使用其中一个提到的shell,shell在管道方面非常出色。等。。

        8
  •  0
  •   kriss    14 年前

    Shell的编程语言占用空间非常小,依赖性非常少。除此之外,我看不出用它有什么意义。个人而言,我更喜欢在这类任务中使用Perl或Python。