したがって、Linuxにはさまざまな種類のシェルがあります。
Linuxのさまざまな種類のシェル
Bourne シェル(sh) ...
GNU Bourne-Again シェル(bash) ...
C シェル(csh) ...
Korn シェル(ksh) ...
Z シェル(zsh)
Shebangから始めて、Bourneシェル用のスクリプトを作成する必要があるプロジェクトがあります。#!/bin/sh
。
ただし、Googleを使用して詳細を見つけるたびに、常に多くの結果が得られます。bash
、一緒に使えると思いますsh
しかし、必ずしもそうではありません...
だから私はGoogleに「いいえ!ちょうどBourneシェルのオリジナルを提供してください!」と言いたかったのです。ただし、人々はほとんどのWebページに「Bourne shell」という文字列を入力しないため、Googleはこの問題を直接解決するのに役立ちません。
次へ追加"sh"
.sh
ファイル拡張子と一致する私のクエリにはあまり役に立ちませんでしたbash
!
次へ追加"#!/bin/sh"
私のクエリは一部ヘルプ - しかし、スクリプトの結果のみが表示され、時には単純な答えがターミナルコマンドとして表示されます(その後、スクリプトで使用するように調整できます)。
「完璧な」解決策はないことを知っていますが、「ヒントとコツ」の精神で、私が望む結果に結果を絞り込むための賢い方法を提案できますか?
それとも、いくつかの権威あるBourne Shellドキュメントソースを使用することが唯一の解決策ですか?それではどれですか?
答え1
実際、あなたは歴史的なBourneシェル(ほとんどの現在のUNIXシステムでは一般的ではない)に興味があるでしょう。現在のPOSIX仕様sh
皮のために 。
- このユーティリティのPOSIX標準は、
sh
ユーティリティを説明するセクションにあります。sh - シェル、標準コマンド言語ソルバーと - POSIX シェルの構文、構文などは Chapter に説明されています。シェルコマンド言語。
また見なさい:
現在承認されている回答U&Lに関する質問「sh互換」とはどういう意味ですか?Unixシェルの歴史と「系譜」について詳しく説明します。
使用しているシステムのコマンドは、
man sh
そのシステムのシェルのマニュアルを表示します。sh
これはPOSIX構文と構文を実装するシェルになります。おそらくシェル方式を変更することで可能です。通常独自の名前で呼び出された場合の動作を示します(たとえば、呼び出されると、bash
操作が実行されます)。zsh
sh
答え2
私の経験によれば、シェルを使用して特定のタスクを実行する方法に関するヘルプを探している場合は、#!/bin/sh
Googleクエリの前に次のいずれかを追加できます。
POSIX- POSIX互換シェルで特定の機能を実装する方法、またはBashなどのシェルでPOSIX互換方式でPOSIXで不要なアドインを実装する方法について議論します。 (通常は https://unix.stackexchange.com)
スプリント- ダッシュは、最も広く使用されているデスクトップLinuxディストリビューションである/bin/sh Ubuntuです。 / bin / shを使用してコマンドを実行するcronやその他のツールで使用されているため、多くの質問と回答が行われました。
忙しい箱- busyboxにはBashやZSHほど大きくない独自のシェルが付属しているので、busyboxシェルで動作するものがあるならローカルミニマリスト/bin/shでも動作する必要があります。
答え3
私が言いたいのは、この問題を解決するための最良の方法です。
常識
これは明白または失礼に聞こえるかもしれませんが、「常識は何ですか?」と尋ねることができます。
bash
sh
時々、いくつかのディストリビューションにはシンボリックリンクがありますsh
時々ash
(Busybox) シンボリックリンクbash
スクリプトは通常、以下でうまく機能し(一部の構文を除く)、sh
その逆も同様です(ash
- と同じsh
)。- 試してみてください。 (文字通り、どの部分を使用したり、より多くの経験がなければ、どの部分にバグがあるかどうかは明らかではないかもしれません
shellcheck
)。 - さまざまなキーワードの組み合わせを試してください。 (これは当然ですが、この投稿を長くすることなく詳細を説明することは困難です。)
- 他の検索エンジンを試してみてください(ほとんど同様の結果が出ますが、必ずしもそうではありません)。精密同じ結果、同じキーワード)
上記は他のシェルにも適用できます。try
見つかったスニペット/コードを使用することを躊躇しないでください(これを実行するときにデバッグし、役立つヒントを提供するために使用したか見つかりました)-x
。set -x
shellcheck
もちろん、質問がある場合や問題が見つかった場合は、各シェルのドキュメントを使用することをお勧めします。
追加リソース:
- http://mywiki.wooledge.org/BashFAQ
- https://github.com/dylanaraps/pure-bash-bible
- https://github.com/dylanaraps/pure-sh-bible
- https://www.gnu.org/software/
- https://wiki.bash-hackers.org/
努力することは学習の一部です。頑張ってください!
答え4
一般的なLinuxディストリビューションのほとんど(CentOSやArchなど)はBashを使用すると思います/bin/sh
。主な例外は、Dashを使用するDebianとUbuntu(およびその派生バージョン)です。 Ubuntuには、最も一般的な「Bashism」を識別する便利なWikiページもあります。https://wiki.ubuntu.com/DashAsBinSh
ご注意ください、オリジナルBourneシェルは、Dashのように実装されたPOSIXシェルとは若干異なります。明示的に検索しないと、Linux システムでは見つかりません。ガボシェル。