2

わかりましたので、DCL スクリプト言語を使用して OpenVMS 上にあるスクリプトを職場で見ましたが、警告やエラーなどをすべてキャッチする方法があります...

ここにそれに関するページがあります。http://h71000.www7.hp.com/doc/84final/9996/9996pro_150.html基本的にそのON warning THEN GOTO sendfailemailようなものです。たくさんのifステートメントを使わずに、bashでそのようなことをする方法はあるのだろうかと思っていましたか?

ERRだけでなくリターンコードに基づいてトラップできるものを探しています。vms の優れている点は、vms では終了ステータス 0 である警告に対して、終了ステータス 2 であるエラーに対して実行できることです。つまり、trap ... ERR を実行できることはわかっていますが、終了ステータス 1 または 2 をトラップできるものが欲しかったのです。具体的には。

4

2 に答える 2

2

「通常の」ことを明確にするために:

set -e
trap 'echo "Failed"' ERR

echo "Start"
false
echo "End"

この例では、set -e何かが 0 以外を返した場合 (ERRトラップの実行後)、スクリプトが終了します。UNIX では、0 以外は「エラー」を意味します。「警告」の戻り値はありません。したがって、スクリプトに特別な戻り値を作成すると、UNIX コマンド パイプラインに正しく適合しなくなります。成功した場合は本当に 0 を返す必要があり、それ以外は何らかの失敗である必要があります。

とはいえ、ここに非常に大きな理由があり、特別な戻り値を持つスクリプトのエコシステムがあるとしましょう。あなたは確かにこれを行うことができます. トラップERRしてチェックするだけです(ここでは手動で$?削除したことに注意してください):set -eexit

trap 'if [ $? == 2 ]; then echo "Failed"; exit 2; fi' ERR

echo "Start"
false
echo "End"

false1 を返すため、これは失敗しません。

いくつかの場所でのみこれを必要とし、明示的にしたい場合は、独自のラッパー関数を作成して、追加のコーディングをあまり行わずに管理できます。

function run() {
  $*
  if [ $? == 2 ]; then
    echo "Failure"
    exit 2
  fi
}

run echo Start
run true
run false
run echo "End"
于 2013-08-20T13:43:41.003 に答える
-1

単純:

if yourcommandhere; then
    echo 'No error'
else
    echo "Error! Exit status of the last command is $?"
fi
于 2013-08-20T10:15:42.663 に答える