在Perl或Python上使用Bash是否有优势?

Man*_*pos 25 python linux bash scripting perl

嘿,我已经使用Linux了一段时间,并认为是时候最终深入研究shell脚本了.

问题是我没有发现使用Bash比Perl或Python这样的任何显着优势.这两者之间是否存在性能或功耗差异?我觉得Python/Perl在功率和效率方面会更合适.

Seb*_*ian 20

我想到了两个好处:

  • 简单:直接访问所有精彩的Linux工具wc,ls,cat,grep,sed...等等.为什么经常使用Python的subprocess模块?
  • 我越来越喜欢使用gnu parallel,你可以用它来并行执行你的bash脚本.例如,从手册页中,批量创建并行目录中所有jpgs的大拇指:

    ls *.jpg | parallel convert -geometry 120 {} thumb_{}

顺便说一句,我通常在我的bash脚本中有一些python调用(例如用于绘图).使用最适合任务的任何东西!


Mar*_*hev 10

Perl脚本通常(如果不是100%的话)比bash快.

对此的讨论:Perl vs Bash


jon*_*esy 6

bash与其说是一种语言,还不如说是一种命令解释器,它已经被黑死了,以使其看起来像脚本语言。这对于最简单的1-5行一次性任务非常有用,但是在Perl或Python中非常简单的事情(例如数组操作)在bash中非常丑陋。我还发现bash往往无法通过两个关键的经验法则:

  1. 6个月的规则,该规则要求您应该能够轻松辨别所编写脚本的目的和基本机制,但在6个月内没有看过。

  2. “每分钟WTF”规则。每个人都有自己的极限,而我的很小。一旦达到3 WTFs / min,我正在寻找其他位置。

至于像Perl和Python这样的脚本语言中的“脱壳”,我发现我几乎永远不需要这样做(免责声明:我几乎用Python编写了100%的代码)。Python os和shutil模块大部分时间都是我所需要的,并且有用于处理tarfile,gzip文件,zip文件等的内置模块。其中有一个glob模块,一个fnmatch模块……很多那里的东西。如果遇到需要并行化的内容,则将代码缩进一个级别,将其放入'run()'方法中,然后将其放入扩展threading.Thread或multiprocessing.Process的类中,实例化为您想要的,在每一个上调用'start()'。一般少于5分钟即可获得并行执行。

祝你好运。希望这可以帮助。


Sve*_*ach 5

与 Python 或 Perl 脚本相比,POSIX shell 脚本最重要的优点是几乎每台 Unix 机器上都可以使用 POSIX shell。(还有一些任务 shell 脚本恰好更方便一些,但这不是主要问题。)如果可移植性对您来说不是问题,我认为没有必要学习 shell 脚本。


nmi*_*els 5

好处是它就在那里。除非您使用Python(或Perl)作为外壳,否则编写脚本执行简单循环是一堆额外的工作。

对于调用其他程序的简短脚本,我将使用Bash。如果我想保留输出,则可能会选择使用Python。

例如:

for file in *; do process $file ; done
Run Code Online (Sandbox Code Playgroud)

process我要在每个文件上运行的程序在哪里,或者...

while true; do program_with_a_tendency_to_fail ; done
Run Code Online (Sandbox Code Playgroud)

在Python或Perl中执行上述任一操作都是过分的。

对于实际编写我希望随着时间的推移可以维护和使用的程序,Bash很少是完成这项工作的正确工具。特别是由于大多数现代Unices都随附了Perl和Python。

  • @Sebastian:太神奇了!尽管我认为“并行过程-*”更加接近。 (2认同)