web-dev-qa-db-ja.com

bash vs csh vs other-アプリケーションのメンテナンスにはどちらが良いですか?

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

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

私の質問は次のとおりです:次の基準が考慮される場合、そこにある推奨コマンドシェルは何ですか?

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

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

  3. 安全で使いやすいですか?スクリプトエラーはサイレントになるか、インテリジェントなエラー出力を提供しますか?初心者が自分で足で撃つことができますか?

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

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

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

15

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

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

あなたの目的を考えると、3つの選択肢があります。

  • 自分をPOSIX shに制限します。長所:標準と準拠の実装がすぐに利用できるので、異なるバリアントについて心配する必要はありません。短所: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を含む)」とは異なり、合理的な選択です。

23
Gilles

cshはほとんど常に 間違っている です。

16
onemasse

Zシェル(zsh)

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

  1. どのシェルを学んでも、構文は非常に似ています。組み込みコマンドのみが若干異なる場合があります。ただし、古くてメンテナンスされていないものを選択しないでください。
  2. 最も人気があるのはバッシュです。しかし、bashのほとんどすべてのコマンドはzshでも同じように機能します。もちろん、いくつかの例外があります。
  3. 私の知る限り、すべてのシェルは同じ方法で処理します。ただし、注意が必要です。シェルは愚かで、プログラミング言語ほどスマートではありません。
  4. ZshがすべてのLinux、FreeBSD、OpenSolarisで動作するのを見ました。
  5. 「4.ディストリビューション」のリポジトリにはzshが含まれています。

zsh(Z Shell) よりも bash を選ぶ理由:

  • 次のように一致するファイル:for file in ./**/*.Java; do ... (というのは ./**/*.ext
  • いつ行うか確認してほしいrm * :)
  • タブオートコンプリートの方がずっといいです、私はdmdomi[tab]およびdnddomainnameを提案します。 Javaは、最初のパラメーターとしてクラス名を要求します。zshは、パッケージおよびすべてのサブパッケージで使用可能なすべてのクラスを提案します。

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

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

6
Nowaker

* nixシェルのシェルスクリプトは、一般的に一見単純です。簡単なことは通常は簡単ですが、難しいことは簡単なこともあり、見やすいものは難しいこともあります。この領域の他のシェルよりも特に優れているシェルはありませんが、一部のシェルはより劣っています(私はcshを真剣にお勧めすることはできません)。一部の人は、bashが最悪の「モダン」シェルであると言いますが、それは本当かもしれませんが、とにかく完全にそれをエスケープすることはできません。

最も「人気のある」シェルを使用することは、Windowsが最適であるのと同じ理由で(そして、私がそうであるとは言っていません)、保守性のために最適であるという主張があります。それ。 kshやzshよりも、少なくともbash固有の機能にある程度通じている人が多いだけです。彼らが何をしているかを実際に理解している人を見つけることは別の問題です。

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

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

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

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

3
Sorpigal

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

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

  1. インタラクティブであるおかげで、ほとんどのシェルは簡単に使用できるようになると簡単に習得できます
  2. 私はbashとposixのサブセットが広いマージンでよく知られていると信じています。しかし、私が言及した言語は多くのシェルと同じくらいよく知られています。
  3. 足元で簡単に自分を撃つことができます。便利なため、多くの場合、望ましくないことが簡単に起こります。
  4. 5.シェル自体の移植性は問題になりません。言及している一部のOSでは、より新しい機能を取得するために再コンパイルが必要になる場合があります。独自のライブラリを備えた本格的な言語を使用すると、プラットフォームの多様性のバリエーションをスムーズにするのに役立ちます。
1
Tobu