SFTP によるファイル転送用のシェル スクリプトは既に作成されており、AIX バージョン 6.1 で正常に動作します。私は SAP Data Services を使用して ETL を開発しており、シェル スクリプトは初めてです。単体テスト中に、ターゲット フォルダー名がユーザーによって変更された場合をシミュレートするために、SFTP に存在しないターゲット フォルダーを指定しましたが、コマンドcdの後で失敗せず、終了コード 0 が返されましたが、エラー メッセージはエコーされました:正規化できませんでした: 失敗。これにより、ETL プロセスはファイルが転送されなかったことを認識しなくなります。スクリプトに exit 1 を挿入すると、ETL ジョブが SFTP の失敗をキャッチし、それ自体が失敗しました。これは予期された動作です。
私の質問は、SFTP コマンドを呼び出してコード 1 で終了する既存のシェル スクリプトを微調整するにはどうすればよいですか?
スクリプトからの抜粋は次のとおりです。
'#!/bin/sh
....
echo cd $TARGET_REMOTE_DIR>>$INPUT_FILE
echo put $TARGET_LOCAL_DIR$TARGET_FILE_NAME>>$INPUT_FILE
echo quit>>$INPUT_FILE
/usr/bin/sftp -b $INPUT_FILE $USER@$HOSTNAME
echo
$?
command の直後に変数をcd
追加すると、リモート dir のスペルが間違っていると 0 が返されます。私が考えているのは、おそらくコマンドの後にエラーメッセージが存在するかどうかをインラインでチェックし、cd
その長さが0でない場合はコード1で終了することです.
疑似コードのようなもの:
error_msg = get_error_msg({cd $TARGET_REMOTE_DIR>>$INPUT_FILE})
if length(trim(error_msg)) <> 0 then
echo “Cannot change directory! Aborting…”
exit 1
fi
コメントをお待ちしております。
乾杯!
Martin の多大な助けを借りて、このソリューションを実装しました。コマンド /usr/bin/sftp の直後にコードを返し、キャッチされたエラーで強制的に終了します!
/usr/bin/sftp -b $INPUT_FILE $USER@$HOSTNAME
if [[ $? -ne 0 ]]; then
" SFTP Error while accessing remote target directory! Error message"
exit $?
fi
皆さん、ありがとうございました!素晴らしいフォーラム!