シェルの損失を防ぐには、set -e を使用します。

シェルの損失を防ぐには、set -e を使用します。

bashスクリプトでset -eを使用したいが、実行するたびにエラーが発生するとシェルは終了します。

  say I have script.sh:

  #! /usr/bin/env bash
  set -e
  my_commmand
  my_other_command

my_commandこれを行うかどうかに関係なく、シェルを吹き飛ばすエラーが発生します。

 % ./script.sh (after chmod)

または

 % . ./script.sh

この問題を解決する簡単な方法が必要です。

答え1

対話型シェルが終了したことを意味しますか?

対話型シェルからスクリプトセットをインポートすると(を使用して.)、set -e「exit-on-error」フラグも対話型シェルに設定されます。以前にこれを実行した場合は、ソーススクリプト()であるか、通常実行される. ./script.shスクリプト(./script.sh)でも、後で実行されるすべてのコマンドに適用されます。

解決策はスクリプトを調達することではありませんset -e

また、見ることができますバッシュFAQ 105その他の問題についてset -e

答え2

対話型シェルに入り、set -eゼロ以外の値を返すコマンドを実行するには、対応する終了コードをキャプチャする必要があります。離れている:

$ some_command || :

その他:

$ if ! some_command; then :; fi

答え3

ログインシェル内で呼び出してから、複合set -eステートメントで使用されていないゼロ以外の終了コードを返すコマンドを実行すると、ログインシェルは終了します。

set -e
false

ログアウトされます。

set -eログインシェルで指定した設定を使用してスクリプトを実行したことがある場合. ./script-e

後でゼロ以外の終了コードを使用してコマンドを実行する場合:bingo。

関連情報