web-dev-qa-db-ja.com

PerlやPythonよりもBashを使用する利点はありますか?

ねえ、私はしばらくLinuxを使っていて、ついにシェルスクリプトに飛び込む時が来たと思いました。

問題は、PerlやPythonのようなものよりもBashを使用することの重要な利点を見つけることができなかったことです。 2つの間にパフォーマンスや電力の違いはありますか?パワーと効率に関しては、Python/Perlの方が適していると思います。

25
ManAmongHippos

Perlスクリプトは通常(100%ではないにしても)bashよりも高速です。

それについての議論: Perl vs Bash

10
Mario Peshev

bashは、スクリプト言語のように見せるためにハッキングされて死に至ったコマンドインタープリターほどの言語ではありません。最も単純な1〜​​5行の1回限りのタスクには最適ですが、PerlやPython配列操作のように単純なものは、bashではひどく醜いです。bashはそうしない傾向があることもわかりました。 2つの重要な経験則を渡します。

  1. 6か月のルール。これは、作成したスクリプトの目的と基本的な仕組みを簡単に識別できるはずですが、6か月間は見ていません。

  2. 「1分あたりのWTF」ルール。誰もが限界を持っており、私のものはかなり小さいです。 3 WTF /分に達したら、他の場所を探しています。

PerlやPythonのようなスクリプト言語での「シェルアウト」に関しては、これを行う必要はほとんどないことがわかりました、fwiw(免責事項:Pythonでほぼ100%コーディングしています)。 Python osおよびshutilモジュールには、ほとんどの場合必要なものがほとんどあり、tarファイル、gzipファイル、Zipファイルなどを処理するための組み込みモジュールがあります。globモジュールがあります。 fnmatchモジュール...そこにはたくさんのものがあります。並列化する必要があるものに出くわした場合は、コードをレベルインデントし、「run()」メソッドに入れて、いずれかのスレッドを拡張するクラスに入れます。 .Threadまたはmultiprocessing.Processは、必要な数だけインスタンス化し、それぞれで「start()」を呼び出します。通常、並列実行を取得するには5分未満です。

幸運を祈ります。お役に立てれば。

6
jonesy

利点は、それがすぐそこにあるということです。 Python(またはPerl)をシェルとして使用しない限り、単純なループを実行するスクリプトを作成することは、多くの余分な作業です。

他のプログラムを呼び出す短くて単純なスクリプトの場合、Bashを使用します。出力を維持したい場合は、Pythonにトレードアップする可能性が高くなります。

例えば:

for file in *; do process $file ; done

ここで、processは、各ファイルで実行したいプログラム、または...

while true; do program_with_a_tendency_to_fail ; done

PythonまたはPerlでこれらのいずれかを実行するのはやり過ぎです。

長期にわたって維持および使用することを期待しているプログラムを実際に作成する場合、Bashがその仕事に適したツールになることはめったにありません。特に最近のほとんどのUnicesにはPerlとPythonの両方が付属しているためです。

5
nmichaels

大規模なプロジェクトでは、Perlのような言語を使用してください。

Bashでしかできないことがいくつかあります(たとえば、呼び出し環境を変更する(スクリプトを実行するのではなくソースにする場合)。また、シェルスクリプトは一般的です。基本を学び、その方法を学ぶことは価値があります。利用可能なドキュメント。

さらに、シェルをよく知っているとベーコンを節約できる場合があります(新しいプロセスを開始できないフォーク爆弾システムの場合、または/usr/binおよびまたは/usr/local/binマウントに失敗します)。

4
daotoad

PythonまたはPerlスクリプトに対するPOSIXシェルスクリプトの最も重要な利点は、POSIXシェルが事実上すべてのUnixマシンで利用できることです(シェルスクリプトがたまたま少し便利なタスクもいくつかあります)。ですが、それは大きな問題ではありません。)移植性が問題にならないのであれば、シェルスクリプトを学ぶ必要はあまりないと思います。

3
Sven Marnach

マシンにインストールされているプログラムを実行したい場合は、bashに勝るものはありません。 PerlやPythonからいつでもシステムコールをかけることができますが、戻り値などを読むのは面倒だと思います。

そして、あなたはそれがいつでもどこでもほとんど機能することを知っているので...

3
drysdam

シェルスクリプトの利点は、* ixボックスにグローバルに存在し、どこでも実行できる比較的安定したコア機能セットを備えていることです。 PerlとPythonを使用すると、それらが利用可能かどうか、利用できる場合はどのバージョンかを心配する必要があります。これは、その存続期間を通じて構文上の重大な非互換性があったためです(特にPython 3およびPerl6。)

シェルスクリプトの欠点は他のすべてです。シェルスクリプト言語は通常、表現力、機能性、パフォーマンスに欠けています。また、強力な文字列処理機能やライブラリを使用せずに、言語の文字列からコマンドラインを一緒にハッキングして、エスケープが正しいことを確認すると、セキュリティ上の問題が発生します。 Shellを使用する必要があるやむを得ない互換性の理由がない限り、私は毎回スクリプト言語を個人的にふっくらとしています。

1
bobince