set -eは何をしますか?


28

私が見つけたスクリプトを実行して、Apacheランタイムライブラリをダウンロードしてインストールしようとしています。最初の行はset -e、エラーの原因です。何をset -eするの?

回答:


22

このビルトインは非常に複雑なので、独自のセクションに値します。

setを使用すると、シェルオプションの値を変更して位置パラメーターを設定したり、シェル変数の名前と値を表示したりできます。

-eオプション

-e

単一の単純なコマンド(単純なコマンドを参照)、括弧で囲まれたサブシェルコマンド(コマンドのグループ化を参照)、またはで囲まれたコマンドリストの一部として実行されたコマンドのいずれかで構成されるパイプライン(パイプラインを参照)がすぐに終了する中括弧(コマンドのグループ化を参照)は、ゼロ以外のステータスを返します。失敗したコマンドがwhileまたはuntilキーワードの直後のコマンドリストの一部、ifステートメントのテストの一部、&&または||で実行されたコマンドの一部である場合、シェルは終了しません。最後の&&または||に続くコマンド、パイプライン内の最後のコマンド以外のコマンド、またはコマンドの戻りステータスが!で反転されている場合を除きます。ERRのトラップは、設定されている場合、シェルが終了する前に実行されます。

このオプションは、シェル環境と各サブシェル環境に個別に適用され(コマンド実行環境を参照)、サブシェル内のすべてのコマンドを実行する前にサブシェルを終了させる場合があります。

出典:www.gnu.org

以下の@psusiのコメントにより編集されました。

さらに、bashのマニュアルページを読むことができます

man bash 

セクション:SHELL BUILTIN COMMANDS

または発行

help set 

短いヘルプメッセージ。


1
これは組み込みコマンドであるため、bash-docをインストールしている場合、必要help setなbashマニュアルはinfo bashになります。
-psusi

明確化@psusiをありがとう。help setおよび/またはman bashが正しいものですset
NickTux

12

set -e 要するに、bashスクリプトの先頭にある場合、スクリプトのいずれかの行が失敗するとすぐに終了するようにスクリプトに指示します(一部の例外はマニュアルに記載されています。)[1]

デバッグオプションとして、set -x「+」記号を使用して実行前に各展開されたコマンドラインを印刷するために、しばしば使用されます。[2]

詳細は以下をご覧ください。

[1] https://www.peterbe.com/plog/set-ex

[2] http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html


2
簡単な説明をありがとう。Dockerfilesでset -xeをよく見ますが、今ではその理由がわかっています:)
ymakux
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.