一部の回答の下には、回答でシェル固有のコマンドを避けるようにコメントが表示されます。
どのシェルにどのようなコマンド、演算子などがあるのか、どうすればわかりますか?標準リストはありますか?
man builtins
コマンドのリストを提供します。これは、すべてのシェルで動作するポータブルシェルスクリプトで使用できる唯一のコマンドですか?- 組み込みはシェルに固有ですか?
- Linux標準は他のUnix標準とどう違うのですか?
- 文法はどうですか?句読点、演算子などは特定のシェルで異なる可能性がありますか?
答え1
グレッグのウィキ一つあるDash用bashスクリプトの適用に関する投稿これは、非標準ですが、bashの一部であるアドインである「bashism」がたくさんあることを示します。このような攻撃を避けると、スクリプトをさまざまな環境でより使いやすくするのに役立ちます。これは特にあなたの質問のいくつかの答えです。はい、一部の演算子は異なるが(たとえば==
)、すべての環境で動作する標準のPosixセットがあります。
より包括的なものについては、以下を確認してください。POSIX規格、すべてのシェルはこれに従う必要があります。特に「シェルとユーティリティ」Vol。
シェルの違いよりも難しいのは、コマンドの違いです。多くのLinuxシステムにはGNUが付属していますが、移植可能なスクリプトを作成する場合は、異なる機能セットを持つBSDを使用するシステムが多いため、find
独自のスクリプトに頼らないでください。 busybox用のスクリプトを作成している場合は、バージョンごとにまったく異なるものがあることがわかります。スクリプトを別の環境にデプロイするとき、これらの問題は常に私を混乱させます。man find
find
nc
良いシェルのスクリプティング方法の詳細については、David Pashleyのブログに素晴らしいリソースがあります。強力なBashシェルスクリプトの作成
またぜひ読んでみてください。ザイルズこのサイトへの回答とコメントです。彼は移植可能なコードを使用していることを確認するための多くのヒントを持っています。
答え2
特定のシェルにシェルスクリプトを作成することは、そのシェルがインストールされることを意味します。唯一の基準は、すべてのUnixバリアントにこれを保持してcsh
インストールすることです。sh
したがって、Solaris、* BSD、および GNU でスクリプトを実行するには、Bourne シェルで作成する必要があります。
ただし、ほとんどのUnixコマンドは実装によって構文が異なるため(ps
Solaris、FreeBSD、GNUを参照)、使用するツールによってはスクリプトを移植できない場合があります。シェルがどこにインストールされているかも重要です。/bin/bash
/usr/bin/bash
、、/usr/local/bin/bash
それとも別の場所ですか?
私はシェルを定義するどの標準も知りません。見るRCまたは、奇妙な非標準シェルの場合は、http://192.220.96.201/es/es-usenix-winter93.html`">es. しかし、これはまだいくつかの一般的なアイデアに合うようです。