5

ほとんどの場合、ゼロ以外のステータスのエラーで停止したいtcshシェルスクリプトを持っていますが、場合によってはそれを無視したいです。例えば:

#!/bin/tcsh -vxef

cp file/that/might/not/exist . #Want to ignore this status
cp file/that/might/not/exist . ; echo "this doesn't work"
cp file/that/must/exist . #Want to stop if this status is nonzero
4

4 に答える 4

3

それでは始めましょう: 新しいシェルを生成し、';' を使用します。最初のステータスを無視して、オールクリアを返します。

$SHELL -c 'cp file/that/might/not/exist . ; echo "good"'
于 2010-06-15T18:32:44.677 に答える
3

tcsh についてはわかりませんが、bash を使用set -eすると、これを行うことができます。-eフラグが設定されている場合、いずれかのサブコマンドが失敗すると、bash はすぐに終了します (技術的な詳細については、マニュアルを参照してください)。設定されていない場合は、引き続き実行されます。したがって、次のようなことができます。

set +e
cp file/that/might/not/exist .  # Script will keep going, despite error
set -e
cp file/that/might/not/exist .  # Script will exit here
echo "This line is not reached"
于 2010-06-14T23:24:39.033 に答える
2
mustsucceed || exit 1
mustbeignored || :
于 2010-06-14T23:28:40.160 に答える
1

失敗しても構わない場合は-e、シバンから を削除してください。tcsh documentationを見ていれば、@Adamの答えはヒントを提供するはずです。

また、エラー メッセージを破棄することもできます。

cp dont_care       . >& /dev/null
cp still_dont_care . >& /dev/null || echo "not there"
cp must_be_there   . >& /dev/null || exit 1 # oh noes!
于 2010-06-15T02:29:58.487 に答える