GNU/Linux >> Linux の 問題 >  >> Linux

スクリプトから正しい終了コードを取得できませんか?

SFTP経由でリモートサーバーに接続し、そこからファイルを取得するスクリプトがあります。私のスクリプトは次のようになります:

/usr/bin/sftp [email protected] <<EOF
lcd /dir1/dir2/dir3
cd /rsdir1/rsdir2/rsdir3
get file_pattern`date -d "last month" +%m%Y`.csv
EOF
rc=$?
        if [[ $rc != 0 ]]
           then
        echo "Error occured getting file and the script abended with error code $rc" `date "+%Y-%m-%d-%H.%M.%S"`
            exit 1
    else
    echo "Successfully transferred the file" `date "+%Y-%m-%d-%H.%M.%S"`
        fi

ただし、スクリプトがパターンのファイルを見つけられない場合でも、その他に移動します。 スクリプトの一部であり、画面に次のように出力されます

Connecting to remote.server.com...
sftp> lcd /dir1/dir2/dir3
sftp> cd /rsdir1/rsdir2/rsdir3
sftp> get file_pattern032014.csv
Couldn't stat remote file: No such file or directory
File "/rsdir1/rsdir2/rsdir3/file_pattern032014.csv" not found.
Successfully transferred the file YYYY-MM-DD-24HH.MI.SS 

ここで私が間違っているかもしれないことについて何かアドバイスはありますか?

承認された回答:

正しいリターンコードを取得しました。sftpセッションが正しく実行されたため、リターンコードは0です。
scpを使用する必要があります 代わりに、コピーに失敗した場合は0を返しません。

あなたは次のようなことをすることができます:

file=file_pattern`date -d "last month" +%m%Y`.csv 
[email protected]:/rsdir1/rsdir2/rsdir3/$file
local=/rsdir1/rsdir2/rsdir3/$file

if scp -q $remote $local
then
    echo "Successfully transferred the file" `date "+%Y-%m-%d-%H.%M.%S"`
else
    echo "Error occured getting file and the script abended with error code $?" `date "+%Y-%m-%d-%H.%M.%S"`
    exit 1
fi

編集:コピーターゲットをファイル名に変更しました:ディレクトリにコピーし、そのディレクトリが見つからない場合は、ディレクトリ名を持つファイルを作成します。


Linux
  1. フォルダから最も古いファイルを削除するためのBashスクリプト?

  2. Utf-8ファイルからBOMを削除する方法は?

  3. 終了コードの出所に関する詳細情報を取得するにはどうすればよいですか?

  1. Pythonで(MB)ファイルのtar.gzのサイズを取得する方法

  2. CからLinuxで現在のファイル(pwd)へのパスを取得する方法は?

  3. bashでファイルの絶対ディレクトリを取得するにはどうすればよいですか?

  1. シェルスクリプトだけを使用してテキストファイルから特定の行を取得する

  2. Pythonスクリプトからシェルスクリプトへの戻り値

  3. コマンドラインから Dropbox ファイルの URL を取得するには?