0

シェルスクリプトのエラーチェックについて意見を頂きたいです。私がサポートしているシステムには、別のアプリケーション (Java) によって複数回実行される単純なシェル スクリプトが含まれています。java は、ftp 接続のオープンを実行するシェル スクリプトを呼び出し、ローカル ディレクトリを移動し、mget コマンドを実行し、最後に bye コマンドを実行します。次に、$? をチェックします。bye コマンドの後。

そもそも、bye コマンドのみを常にチェックする必要があるため、このコードは疑わしいことを知っていますが、断続的にエラーが発生します。UNIX 管理者に、システムにログ エラーがあるかどうかを確認するように既に依頼しましたが、ログ エラーはないとのことでした。

基本的に、スクリプトの一般的な構造は次のとおりです。

sftp -oPort=<port forwarding port> <ip and user> <<==
lcd <some variable>
mget <some variable>
bye

rtn=$?
if [ ${rtn} != 0 ]
then
        exit 1
fi

exit 0

なぜ$のアイデアはありますか?時々ゼロ以外を返しますか?

4

1 に答える 1

3

ゼロ以外の終了コードの理由:

  1. lcd コマンドが失敗し、バッチ モードになっています
  2. mget コマンドが失敗し (グロブが機能しませんでした)、バッチ モードになっています。
  3. bye コマンドが失敗し (低確率)、バッチ モードになっている
  4. リモート エンドに sftp サーバーがありませんでした (終了コード == 255)

使用中のコマンドからのエラーを意図的に無視したい場合は、コマンドの前に「bebes」などを付けることができ-ますmget-mget

これをデバッグしようとするときに重要なことは、コマンドの出力をキャプチャし、コマンドが失敗したときにダンプすることです。

trap 'rm -f /tmp/logfile.$$' EXIT HUP
sftp -oPort=<port forwarding port> <ip and user> >&/tmp/logfile.$$ <<EOM
lcd <some variable>
mget <some variable>
bye
EOM
rtn=$?
if ((rtn != 0)); then
    cat /tmp/logfile.$$
    exit 1
fi
exit 0

trapスクリプトが終了すると、ファイルが削除されます。

于 2012-10-01T09:57:09.150 に答える