ローカルディレクトリとリモートディレクトリパスを入力し、ファイルをリモートディレクトリに送信する子shファイルがあります。リモートパスが無効な場合、エラーを検出できません。
shスクリプト内のコンテンツの例:
sftp [email protected] <<==
cd $remote_dir <= error happens here
lcd $local_dir <= error did not happen so the return code resets
put a.tar
bye
==
$result=$?
return $result
一部のアプリケーションはshファイルを呼び出し、戻りコードを使用してファイルが正常に転送されたことを確認します。その場合は、ローカルファイルをどこかにバックアップしてから削除してください。
問題は、ファイル転送に失敗してもシェルがゼロを返すことです。ファイルは実際にはコピーされません。コマンドを手動で実行するとエラーが発生し、画面にパスが見つからないと表示されますが、ジョブとして実行すると失敗することがわかります。
別の方法は、2段階のプロセスを実行することです。まず、パスが存在することを確認してからログファイルに出力し、ログにエラーがあるかどうかを確認し、エラーがない場合はsftp putシェルスクリプトを呼び出すことができます。別の方法があるかどうか疑問に思います。
ベストアンサー1
sftp
次のオプションを使用して実行してください-b
。
sftp -b - [email protected] <<==
cd etc.
==
~からsftp
手動:
-雨バッチ
モードでは、標準入力ではなく入力バッチファイルから一連のコマンドを読み込みます。ユーザーの対話が不足しているため、非対話型認証で使用する必要があります。バッチファイル「-」を使用して標準入力を表すことができます。sftpがハングします次のいずれかのコマンドが失敗した場合: get, put, reget, reput, rename, ln, rm, mkdir,目次、これ、目次、chmod、chown、chgrp、lpwd、df、シンボリックリンク、lmkdir。 "-"文字を先頭に追加することで、コマンドごとのエラー終了を抑制できます(例:-rm /tmp/blah*)。