次のシバンのシェルスクリプトをいくつか見ました。
#!/bin/bash -x -v
しかしながら、 man bash
はこれらの引数について説明していません-x
および-v
は、それらがbash
に属している場合に限ります。
だから何それら-x
および-v
(および他の可能な引数)はどういう意味ですか?
man bash
から(はい、大きなmanページです。通常、Google検索の方が高速です):
-x
コマンド、ケースコマンド、選択コマンド、またはコマンドの算術の各単純なコマンドを展開した後、PS4の展開された値を表示し、その後にコマンドとその展開された引数または関連するWordリストを表示します。
効果的に:スクリプトを実行すると、そのスクリプトで実行されたすべてのアクションが表示されます。したがって、すべてのif、ループ、コマンドが実行されます。デバッグに非常に役立ちます。
-v
読み取られたシェル入力行を印刷します。スクリプトを実行すると、ファイルを読み取るときにスクリプト全体が印刷されます。シェルをインタラクティブに使用すると、Enterキーを押すと、各コマンドが表示されます。
上記の引用はman bash
の組み込みコマンドset
の説明からのもので、set
のオプションも引数として渡すことができることを説明しています(Shebang行で) :
特に記載がない限り、オプションはデフォルトでオフになっています。
+
ではなく-
を使用すると、これらのオプションがオフになります。 オプションは、シェルの呼び出しの引数として指定することもできます。現在のオプションのセットは、$-
にあります。無効なオプションが検出されない限り、戻りステータスは常にtrueです。
Bashのmanページdoesこれらのオプションは実際にはさらに下で説明されていますが、見落とされがちです。
したがって、問題は実際には次のようになります。bashのmanページのOPTIONSセクションが不完全です。答えは、それらを複製するか、OPTIONSセクションの最初のセクションを強調表示することです。
OPTIONS
All of the single-character Shell options documented in the descrip‐
tion of the set builtin command can be used as options when the Shell
is invoked. [ ... ]
最後に、これを完全にするために、これらはread(-v
)およびrun(-x
)。出力はstderrに表示されます。