シェル固有ではないものは何ですか?


9

一部の回答では、回答にシェル固有のコマンドを使用しないことを推奨するコメントが表示されます。

すべてのシェルに存在するコマンド、演算子などを知るにはどうすればよいですか?規格のリストはありますか?

  • man builtinsコマンドのリストを示します。これらは、すべてのシェルで機能するポータブルシェルスクリプトで使用できる唯一のコマンドですか?
  • 組み込みはシェル固有ですか?
  • Linuxの標準は他のUnixの標準と異なりますか?
  • 構文はどうですか?一部のシェルでは句読点、演算子などが異なる場合がありますか?

回答:


12

GregのWikiには、多くの「バシズム」(非標準だがbashの一部である追加機能)を指摘する、Dash用のbashスクリプトの適応に関する投稿があります。これらのバシズムを回避することで、スクリプトをさまざまな環境で使いやすくすることができます。これは特にあなたの質問のいくつかに答えます。たとえば、はい、異なる(のような==)演算子がありますが、すべての環境で機能する標準のPosixセットがあります。

より完全に読むには、すべてのシェルが準拠する必要があるPosix標準を確認してください。特に「Shell&Utilities」の巻。

シェルの違いよりも難しいと思うのは、コマンドの違いです。多くのLinuxシステムにはGNU findがありますが、移植可能なスクリプトを作成している場合は、独自の機能man findに依存しないでくださいfind。これは、機能セットが異なるBSD を備えたシステムが数多く存在するためです。busybox用のスクリプトを作成している場合は、完全に異なるを使用した異なるバージョンがあることがわかりますnc。これらは、スクリプトをさまざまな環境に展開するときに常に私に得られるものです。

優れたシェルスクリプトの実務上の余分な読書のために、デビッドPashleyさんのブログ上の優れたリソースもあります:堅牢なbashのシェルスクリプトの作成します

また、このサイトでGillesの回答とコメントを必ずお読みください。彼には、移植可能なコードを使用するためのヒントがたくさんあります。


5

特定のシェルでシェルスクリプトを作成するとは、そのシェルがインストールされていることを意味します。唯一の標準が持つことであるcshsh、すべてのUnixバリアント以上インストールされています。したがって、スクリプトをSolaris、* BSD、およびGNUで実行したい場合は、たとえばBourneシェルでスクリプトを記述する必要があります。

ただし、ほとんどのUnixコマンドは、実装が異なると構文が異なります(psSolaris、FreeBSD、GNUで確認してください)。そのため、使用するツールによっては、スクリプトを移植できない場合があります。シェルがインストールされる場所も同様に重要になります。それは/bin/bash /usr/bin/bash/usr/local/bin/bashどこか別の場所、または?

シェルを定義する標準については知りません。rcやhttp://192.220.96.201/es/es-usenix-winter93.html`">esを見て、奇妙な非標準のシェルを探してみてください。


7
POSIXはshを定義します。
Random832
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.