![主流* NIXシェルの基本的な違いは何ですか? [閉鎖]](https://linux33.com/image/42090/%E4%B8%BB%E6%B5%81*%20NIX%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E9%81%95%E3%81%84%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
主流* NIXシェルの基本的な違いは何ですか?どのような状況で他のものを使用するように誘導できますか?これらのいくつかはユーザーの好みによって変わることがあることを知っていますが、Bashだけを使ったことがあり、他のシェルがどこで役に立つかを知りたいです。
また、あるシェルまたは別のシェルで実行されたときにユーザーが作成したシェルスクリプトにどのような影響がありますか、それともファイルの上部にあるシェルのみを変更しますか?私の直感は簡単ではないと言います。
答え1
インタラクティブな使用には2つの主要な競合他社があります。吹くそして扱いにくい、そして落ち込んでtcshそして新しく来た人魚。
BashはGNUプロジェクトの公式シェルであり、ほとんどのLinuxディストリビューションのデフォルトシェルです。基本的なインストールの一部として適切なインタラクティブシェルが提供されていない他のユニスでは、人々は自分自身を強化します。また、見ることができますBashはなぜどこにいますか?(歴史的な内容が多いです。)
ZshはBashのほぼすべての機能とそれ以上の機能を備えています(有用です!)。最大の欠点は、よく知られていないことです。つまり、他の人が設定したシステムにインストールされていることを発見する可能性が少なく、これに関する他社文書が少ないことを意味します。また、見ることができますzshのどの機能を使用しますか?、Bashで欠落しているzshで欠けている機能とは何ですか、その逆の場合も同じですか?、BashとZshの実際の違いは何ですか?。
Tcshは(1990年代初頭まで)以前のcshと同様に、最高のインタラクティブ機能を備えたシェルでした。これにより、インタラクティブな使用が人気になりました(しかしスクリプト用ではない)。 Zshはtcshに追いついてすぐに進化し、Bashは2000年代初頭に追いついた(プログラミング機能を介して行われた)、tcshは過去15年間でほとんど進歩がありませんでした。だから今はtcshを学ぶ理由はありません。
フィッシュは前任者よりもきれいになろうとしています。これには、いくつかのきれいな機能(より簡単な構文、コマンドラインの構文の色付け)がありますが、他の機能(作成者が気に入らない機能)が欠けています。魚のコミュニティはzshコミュニティよりはるかに小さいので、影響はより深刻です。
スクリプトの場合、スクリプトの移植性を望む程度に応じて複数の言語をターゲットにすることができます。
Unix系列であるふりをするすべてに回から派生したシェルの周り
/bin/sh
にいくつかの商用ユニットがあります。/bin/sh
POSIX遵守する。今日実行されているほとんどすべてのUNIXは、少なくとも
sh
POSIX.2-1992に準拠し、通常は少なくともPOSIX:2001(別名Single Unix v3)。シェルは、/usr/bin/posix
などの別のディレクトリに配置できます/usr/xpg6/bin
。 POSIXエミュレーション層は、それをサポートするのに十分強力なほぼすべてのシステムに存在するため、魅力的なターゲットになります。多くのUNIXシステムではクッシュ 93これは、POSIX shにはないいくつかの非常に便利な機能(配列、連想配列、拡張グローブ(
*(foo)
、、、@(foo|bar)
…)、ヌルグローブ(~(N)foo*
)、…)を提供します。 Kshは商用ソフトウェアで始まり(いくつかの習慣が形成されてから2000年に無料になります)、多くの無料ユニス(Linux、* BSD)は古い無料クローン(*)のみを提供する習慣を持っています。PDKSH)には、これらの便利な機能がたくさんありません。 Pdkshは現在進行中です。ムケシOpenBSDの外では、mkshでさえ、すべてのksh93機能を実装していません。最近では、ksh93をどこでも使用できるとは期待できません。特にBashが標準であるLinuxではさらにそうです。吹くLinuxでは常に使用でき(一部の組み込みバリアントを除く)、通常は他のUnixでも使用できます。時には別の構文を使用しますが、ksh93の便利な機能がほとんどあります。
ジッシュksh93とBashの便利な機能のほとんどが装備されています。コア構文はよりきれいですが、Bourneと互換性がありません。 macOSを除いて、インストールしていないシステムでzshを使用できることを期待しないでください。
より高度なスクリプトをご希望の場合は、以下をご覧ください。真珠またはPython。これらの言語は、適切なデータ構造、優れたテキスト操作機能、優れたプロセス構成と通信メカニズム、利用可能な多数のライブラリを備えています。ほとんどのUNIXシステムには、オペレーティングシステムにバンドルされているか管理者がインストールしたスクリプトがあります(PerlスクリプトとPythonスクリプトが多すぎて少なくとも1つ以上のシステムがほとんどないため)。
答え2
シェルには、sh(例:bash)とcsh(例:tcsh)の2つの基本タイプがあります。対話型使用の場合、これは主に習慣によって異なります。私は長年にわたってcshとtcshを使用してきました。私もbashを使っていましたが、切り替える強力な理由はありません。定期的に使用しているコンピュータでそのいずれかが利用できない場合は除外されます。
プログラミングの場合、構文は異なります。シェルだけを変更することはできず、スクリプト構文も変更する必要があります。スクリプトにはshまたはbashを使用する必要があります。説明したように、構文はスクリプトに適しています。ここ(ありがとうございます。リカルドの頭リンク用。これはいいです。ガイドBashスクリプト情報。
まだシェルを使用することを決めておらず、いくつかのスクリプトを書きたい場合は、学ぶべき内容の量を減らすためにbashを使用します。
答え3
AT&TがUNIXを発明した頃、Steve Bourneが書いたBourne Shellがいました。それは非常に基本的であり、現在私たちが当然のように思う多くのツールが欠けていました。
当時、AT&Tは実際にUNIX事業を行っていなかったため、Berkeleyは非常に基本的なオペレーティングシステムを採用し、BSD UNIXにいくつかの変更を適用しました。多くの変更の中には、タスク制御、より良いインタラクティブな使用など、shに比べて多くの改善が行われたcshという新しいシェルがあります。残念ながら、彼らはshプログラミング構文がひどいと思ってCコーディングスタイルを(やや不都合に)コピーした独自の構文を作成しました。 (古典的な苦情はhttp://www.faqs.org/faqs/unix-faq/shell/csh-whynot/)今、2つの構文があります。
後で CSH を改善し、タブの完成と他のいくつかの機能を追加しました。これはtcshになり、CSHを使用している場合はおそらく使用されます。
AT&TはUNIX事業から完全に外れたとは思わず、これを改善しています。 David Korn(いい人)がKornシェルを作りました。 Bourneシェル構文を拡張するというアイデアに基づいて、プログラマと対話型の使用のために多くの機能を追加します。実際にはいくつかのバージョンがあり、バリアントを表すksh88やksh93のようなものはほとんど見えません。
その後、FSFとGNUオペレーティングシステムが登場しました。彼らはHurdと呼ばれる独自のUNIX準拠のオペレーティングシステムを作成したかったので、これにはより良いシェルを提供したいと思いました。彼らはbashをBourne Again SHellと呼びます。 POSIXの規則はこの頃に出てきて、彼らは作りたかったのです。これPOSIXシェル。彼らはBourneシェルの構文とKornシェルの改良点を見て採用し、tcshのインタラクティブ機能を盗んで拡張しました。これはLinuxで事実上のシェルになったので、非常に一般的でした。
「究極の」シェルとして知られるzshもあります。これはLinuxの世界でも非常に一般的です。それはbashを拡張します(そしていくつかの交差水分を通して、いくつかの新しい内容がbashに戻ります)。
シェルを選択する必要がある場合は、bashまたはzshを選択します。 bashはおそらくzshよりも多くの場所に存在するでしょう。 zshはより強力ですが、bashは私にとって良いです。実際の/bin/sh Bourneシェルは歴史的な理由でのみ存在します。 bashにはkshが提供するほとんどすべての機能とそれ以上の機能があります。構文はcshやtcshよりも明確で、機能も優れています。
変換スクリプトはどこで起動するかによって異なります。 Bourneシェルスタイル(sh、ksh、bash、zsh)とcshスタイル(csh、tcsh)の間の変換は困難です。以前のバージョンから新しいバージョンに(/bin/sh => bash、/bin/ksh => zsh)、移動するのは逆よりも簡単です。
答え4
時間が経つにつれて、私は多くの殻を使用しました。非常に高度なレベルではありませんが、十分なカスタマイズを必要とする実用的なシステム管理とプログラミング作業がたくさんあります。
私はzshが少なくとも以前はより多くのカスタムオプションを持っていると思います。しかし、長年にわたってzshを使用した後、安定性と文字エンコーディングの問題が十分に発生しました。 Bashは堅牢で、このような問題は発生せず、どこにでもインストールされます。