17

重複の可能性:
どのLinuxシェルを使用する必要がありますか?

私はLinux環境に習熟し始めており、コマンドシェルスクリプトの観点から選択した武器を選択しようとしています(私はまだこれで大きなn00bなので)、私(および他の人)が管理、テストするのに役立ちます*NIX環境で実行されている一連のサーバー側アプリケーションを管理します。

私の質問は次のとおりです。次の基準を考慮した場合に推奨されるコマンドシェルは何ですか。

  1. シェルスクリプトに触れたことがないジュニア開発者にとって、習得/理解するのはどれほど簡単ですか?

  2. このシェルスクリプトを知っている開発者の大きなプールはありますか?

  3. 安全で使いやすいですか?スクリプトエラーは無音ですか、それともインテリジェントなエラー出力を提供しますか?

  4. どれくらい持ち運び可能ですか?-同じスクリプトがOpenSolarisとRedhat、FreeBSDで実行されることを期待できますか?(特定のOSの付与されたコマンド構文とオプションはそれに応じて変更されます)

  5. それはどのくらい標準ですか?* NIXのほとんどのディストリビューションに含まれると予想されますか、それとも追加でインストールする必要がありますか?

特定のコマンドシェルに対して強い感情を抱くキャンプがあることを理解しています。私は情報に基づいた意見を探しています。

4

5 に答える 5

26

最近では、ほとんどすべての非組み込み(または大規模な組み込み)オペレーティングシステムにPOSIX:2001(別名Single Unix v3互換性レイヤー)があります。これはUNIXプラットフォーム(Linux、Mac OS X、Solaris、* BSDなど)でネイティブであり、WindowsやAndroidなどの他のプラットフォームにインストールできます。POSIXは、通常POSIXshとして知られるシェル言語を指定します。この言語はBourneシェルから派生しています。

ほとんどのUNIXシステムには、POSIX shの2つの実装のうちの1つがあります。kshまたはbashであり、POSIXと比較して追加の便利な機能があります。ただし、あまり主流ではないシステム(特に組み込みシステム)には、POSIXで義務付けられている機能しかない場合があります。

あなたの目的を考えると、私は3つの選択肢を見ます:

  • POSIXshに制限してください。長所:標準の実装があり、準拠した実装がすぐに利用できるため、バリアントの違いについて心配する必要はありません。短所:bashとkshの拡張機能のメリットはありません。
  • kshとbashの共通部分を使用します。これは見た目は魅力的ですが、1つではなく2つの参照ドキュメントを使用する必要があることを意味します。bashとkshに共通する機能でさえ、常に同じ構文を使用するとは限りません。特定のシステムでどちらを使用するかを判断するのも面倒です。
  • kshまたはbashのいずれかを選択します。bashとkshはどちらも、すべてのUNIXライクなプラットフォームとWindowsで利用できます。どちらにも、ほとんどのプラットフォームにインストールできるオープンソース実装(bash用の唯一の実装、ksh用のATT ksh93)があります。私は2つの理由でkshよりもbashに行きます。まず、これはLinuxのデフォルトであるため、これに慣れている人が増えます。第二に、kshの古い、機能の少ない実装が付属しているシステムがあります。ksh93をインストールできる場合でも、デプロイするときに考慮しなければならないもう1つのことです。

スクリプト用のcshを忘れ、一般的なデフォルトの可用性が必要な場合はzshを忘れてください。

主流の*NIXシェル間の基本的な違いは何ですか?も参照してください。、特に私の答えの「スクリプト用」の部分。

シェルプログラミングには、シェル以外の他のユーティリティが含まれることに注意してください。POSIXは、これらの他のユーティリティを指定します。「bashとその他のPOSIXユーティリティ」は、「POSIXユーティリティ(shを含む)」とは異なり、合理的な選択です。

于 2010-11-30T20:32:53.913 に答える
16

cshはほとんどの場合間違っています。

于 2010-11-30T19:04:36.967 に答える
7

Zシェル(zsh)

今のところzshが最も強力だと言われているので、試してみることをお勧めします。

  1. どのシェルを学習しても、構文は非常に似ています。組み込みコマンドのみがわずかに異なる場合があります。しかし、それらの古くて維持されていないものを選ばないでください。
  2. Bashが最も人気があります。ただし、bashのほとんどすべてのコマンドはzshでも同じように機能します。もちろん、いくつかの例外があります。
  3. AFAIK、すべてのシェルはそれを同じように処理します。ただし、注意が必要です。シェルは愚かで、プログラミング言語ほど賢くはありません。
  4. zshがすべてのLinux、FreeBSD、OpenSolarisで動作しているのを見ました。
  5. 4.ディストリビューションのリポジトリにzshが含まれているを参照してください。

bashよりもzsh(Zシェル)を好む理由:

  • このように一致するファイル:(for file in ./**/*.java; do ...つまり./**/*.ext
  • 私がするときに確認してほしいrm *:)
  • tab-オートコンプリートの方がはるかに優れています。私は書くことができdmdomi[tab]、それが示唆していdnddomainnameます。java最初のパラメーターとしてクラス名が必要な場合、zshはパッケージおよびすべてのサブパッケージで使用可能なすべてのクラスを提案します。

ただし、zshだけに限定されるわけではありません。何かがうまくいかない場合は、bashまたはshで記述してください。これは"#!/bin/bash"、のスクリプトの上にあるものです。:-)

すばやく開始するには、私の.zshrc構成を使用します。http ://www.rozne.geozone.pl/.zshrc変更する必要があるのは。だけですexport LANG="pl_PL.UTF-8"。おそらくポーランド語のロケールは必要ありません。

于 2010-11-30T18:55:15.697 に答える
3

* nixシェルのシェルスクリプトは、一般的に一見シンプルです。簡単なことは通常簡単です、時には難しいことは簡単です、時には簡単に見えることは難しいです。この分野で他のシェルよりも特に優れているシェルはありませんが、悪いシェルもあります(cshを真剣に推奨することはできません)。bashは最悪の「モダン」シェルであると言う人もいます。これは本当かもしれませんが、とにかく完全に逃れることはできません。

Windowsが最適であるのと同じ理由で、最も「人気のある」シェルを使用することが保守性に最適であるという議論があります(そして私はそれがそうであるとは言いません):使用方法を知っているあなたが雇うことができる人を見つけるのは簡単ですそれ。たとえば、kshやzshよりも、bash固有の機能に少なくともある程度の知識を持っている人の方が多いだけです。自分がしていることを実際に理解している人を見つけることは別の問題です。

すべてのシェルには、さまざまな落とし穴、コーナーケース、および奇妙な動作があります。ほとんどの場合、それはあなたが慣れているものに帰着します。自分の足を撃つことは、私が壮大なUnixの伝統と呼んでいるものであり、*nixシェルで本当にあなたを安全に保つことはできません。

表示されるほぼすべてのシェルは、ほぼすべてのプラットフォームに非常に移植性があります。これは事実ですが、使用するユーティリティとそれらに渡すオプションに注意しない限り、3つの異なるボックスで同じ(たとえば)bashスクリプトを実行できるとは限りません。ポータブルシェルスクリプトを書くことは、それらがどのシェルのために書かれているかとは何の関係もないという理由で難しいです。

ほぼすべてのLinuxがデフォルトでbashを使用しており、ほとんどのシェルが利用可能です。FreeBSDには、デフォルトでsh、csh、tcshが含まれており、ポートにはbashなどが含まれています。昔々、Mac OS Xはデフォルトでtcshを使用していましたが、現在はデフォルトでbashを使用しており、最も一般的なシェルとともにzshが含まれています。それを超えてコメントすることはできません。

個人的には、(ほとんど)慣性からbashを使用します。まだ慣れていない場合は、代わりにzshを使用します。

于 2010-11-30T19:00:37.430 に答える
1

bashは標準であり、インタラクティブな使用に非常に優れています(多くのプログラム、履歴、readlineサポート、多くの種類の文字列拡張をサポートする優れた完了)。また、シェル(配列とハッシュ、引用符、文字列操作)のスクリプト作成も得意です。ただし、信頼できるスクリプトを作成するには、さらに多くのことを学ぶ必要があります。

プログラムを成長させ、精巧なデータ構造を操作し、いくつかの便利なライブラリを使用できるようにしたい場合は、python、ruby、perlなどの言語を学ぶ必要があります。それらのほとんどにはインタラクティブなインタープリターもあり、シェルほど便利ではありませんが、迅速なテストには役立ちます。Pythonの場合はIPythonが特に便利です。ドキュメントを非常に簡単に探索でき、ソースのロードとリロードが可能で、デバッガーが含まれています。また、いくつかの標準シェルコマンドが含まれており、それらの前に。を付けることで、残りを標準シェルに渡すことができます!

  1. インタラクティブであるおかげで、ほとんどのシェルは、排他的に使用し始めると簡単に習得できます。
  2. bashとposixサブセットは、かなりの差でよく知られていると思います。しかし、私が言及した言語は、多くのシェルと同じくらいよく知られています。
  3. あなたは簡単に足で自分を撃つことができます、便利さはしばしば望ましくないことを簡単にします。
  4. 5.シェル自体の移植性は問題にはならないはずです。言及したOSのいくつかでより新しい機能を取得するには、再コンパイルが必要になる場合があります。独自のライブラリを備えた本格的な言語を使用すると、さまざまなプラットフォームのバリエーションをスムーズにするのに役立ちます。
于 2010-11-30T19:13:22.377 に答える