-3

私はスクリプティングの達人ではないので、ここで質問する必要があります :)

これに対してエラー処理を実装するにはどうすればよいですか。

find . -type f|sed 's_\.\/__' > $PATH

つまり、これが成功しなかった場合は中止します。

事前にどうもありがとうトーマス

4

2 に答える 2

1

&& や || などの条件を使用してみてください。

find . -type f|sed 's_./__' > $PATH && if_true_do_something || if_false_do_something

于 2013-09-11T11:22:08.850 に答える
0

まず、 $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

于 2013-09-11T11:24:54.000 に答える