2

関数が失敗した場合、スクリプトを終了したいと思います。通常は問題ありませんが、プロセス置換を使用すると問題になります。

$ cat test.sh
#!/bin/bash

foo(){
  [ "$1" ] && echo pass || exit
}

read < <(foo 123)
read < <(foo)
echo 'SHOULD NOT SEE THIS'

$ ./test.sh
SHOULD NOT SEE THIS

CodeGnomeの答えに基づいて、これはうまくいくようです

$ cat test.sh
#!/bin/bash

foo(){
  [ "$1" ] && echo pass || exit
}

read < <(foo 123) || exit
echo 'SHOULD SEE THIS'
read < <(foo) || exit
echo 'SHOULD NOT SEE THIS'

$ ./test.sh
SHOULD SEE THIS
4

1 に答える 1

2

set -e失敗した場合にスクリプトを終了するために使用できます。多くの場合、これは小さなスクリプトでは十分ですが、粒度に欠けます。

$?コマンドや関数の戻りステータスを直接確認したり、変数を調べたりすることもできます。例えば:

foo () {
  return 1
}

foo || { echo "Return status: $?"; exit 1; }
于 2012-07-24T00:26:55.843 に答える