可能性のある複製:
どのLinuxシェルを使用する必要がありますか?
私はLinux環境に熟練し始めており、私(および他の人)が管理、テストするのに役立つコマンドシェルスクリプト(私は今でも大きなn00bであるため)の観点から、選択する武器を選択しようとしています* NIX環境で実行されるサーバー側アプリケーションのセットを管理します。
私の質問は次のとおりです:次の基準が考慮される場合、そこにある推奨コマンドシェルは何ですか?
シェルスクリプトに触れたことがないジュニア開発者にとって、学習/理解はどれほど簡単ですか?
このシェルスクリプトを知っている開発者の大きなプールはありますか?
安全で使いやすいですか?スクリプトエラーはサイレントになるか、インテリジェントなエラー出力を提供しますか?初心者が自分で足で撃つことができますか?
それはどれくらいポータブルですか? -同じスクリプトがOpenSolarisおよびRedhat、FreeBSDで実行されることを期待できますか? (特定のOSの許可されたコマンド構文とオプションはそれに応じて変更されます)
それはどのくらい標準ですか? * NIXのほとんどのディストリビューションに含まれる予定ですか、それとも追加でインストールする必要がありますか?
特定のコマンドシェルに対して/に対して強い感情を抱いているキャンプがあることを理解しています。情報に基づいた意見を探しています。
最近では、ほぼすべての非組み込み(または大規模組み込み)オペレーティングシステムに 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つの選択肢があります。
スクリプティングの場合はcshのことを忘れ、一般的なデフォルトの可用性が必要な場合はzshのことを忘れます。
主流の* NIXシェル間の基本的な違いは何ですか? 、特に 私の回答 の「スクリプト用」の部分も参照してください。
シェルのプログラミングには、シェル以外の他のユーティリティが含まれることに注意してください。 POSIXはそれらの他のユーティリティを指定します。 「Bashと他のPOSIXユーティリティ」は「POSIXユーティリティ(shを含む)」とは異なり、合理的な選択です。
cshはほとんど常に 間違っている です。
今のところ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"
。おそらくポーランド語のロケールは必要ありません。
* 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を使用します。
bashは標準であり、インタラクティブな使用に非常に優れています(多くのプログラム、履歴、readlineサポート、さまざまな種類の文字列展開をサポートする優れた補完機能)。また、シェル(配列とハッシュ、引用符、文字列操作)のスクリプト作成にも優れています。信頼できるスクリプトを書くには、もっと多くのことを学ぶ必要があります。
プログラムを成長させ、精巧なデータ構造で作業し、いくつかの有用なライブラリを使用したい場合は、python、RubyまたはPerlなどの言語を学習する必要があります。これらのほとんどにインタラクティブなインタプリタがあります同様に、シェルほど便利ではありませんが、迅速なテストに役立ちます。PythonのIPythonは特に便利です。これにより、ドキュメントを非常に簡単に探索したり、ソースをロードおよび再ロードしたりできます。デバッガが含まれています。また、標準のシェルコマンドや残りを!
でプレフィックスすることにより、残りを標準シェルに渡すことができます。