set -eがオンのときにシェルが終了しないようにしますか?

set -eがオンのときにシェルが終了しないようにしますか?

set -eスクリプトを開きました。唯一のことは、ここで失敗したときにスクリプトを終了させたくありませんが、他のすべてのコマンドも同じように実行したいコマンドが1つあることです。set -eエラーコードが発生したときにスクリプトを終了せずに実行を続けるにはどうすればよいですか?

問題のスクリプト:

native=$(pacman -Qenq -)

stdinがデフォルトのパッケージ名でない場合、stdinにエラーコードが書き込まれます。

ベストアンサー1

set -eaka はset -o errexit条件の一部であるコマンドでは機能しません。たとえば、次のようになります。

if cmd; do
until cmd; do
while cmd; do
cmd || whatever
cmd && whatever

ERRこれはそれをサポートするシェルトラップにも当てはまります。

したがって、コマンドの失敗を無視する慣用的な方法は次のとおりです。

cmd || : errors ignored

それ以外の場合:

cmd || true
cmd || :

これにより、呼び出しはキャンセルされ、set -e0に設定されます(cmd失敗時/へ$?の呼び出し)。:truecmd

cmd && true
ret=$?

また、キャンセルしますがset -e終了状態を維持しますcmd

おすすめ記事