私はスクリプティングの達人ではないので、ここで質問する必要があります :)
これに対してエラー処理を実装するにはどうすればよいですか。
find . -type f|sed 's_\.\/__' > $PATH
つまり、これが成功しなかった場合は中止します。
事前にどうもありがとうトーマス
&& や || などの条件を使用してみてください。
find . -type f|sed 's_./__' > $PATH && if_true_do_something || if_false_do_something
まず、 $PATH は無効な単一パスであるため、コマンドは少なくとも確実に失敗します。
find . -type f | sed 's_\.\/__' > $PATH
両方のコマンドがうまく機能したかどうかを確認したい場合はpipefail
、行に沿ったコマンドのいずれかが最後のコマンドだけでなく 1 つを返す場合、パイプ呼び出しがゼロ以外のステータスを返すようにするオプションを使用します。
set -o pipefail ## You have this only once in the script.
find . -type f | sed 's_\.\/__' > $PATH || {
echo "Failed."
exit 1 ## This probably is what you mean to abort.
}
# Shell script continues here...
別の方法:
...
find . -type f | sed 's_\.\/__' > $PATH
if [[ $? -ne 0 ]]; then
echo "Failed."
exit 1
fi
例:
> set +o pipefail ## Disable pipefail (default).
> true | false
> echo $?
1
> false | true
> echo $?
0
> set -o pipefail ## Enable pipefail.
> true | false
> echo $?
1
> false | true
> echo $?
1
最後でなくても、最後のコマンドが 1 を返したことに注意してくださいfalse
。whenpipefail
が無効になっている間、コマンドの 1 つ ( ) が 1 を返しても、pipe コマンドは 0 を返しますfalse
。