0

テキスト ファイルから一連のパラメーターを取得し、それらのパラメーターに基づいて SFTP を実行するシェル スクリプトを作成しようとしています。基本的に、私は毎日の webstats ログを取り、それを中央の場所に移動しています。

私が抱えている問題は、変数を割り当てる方法に基づいて SFTP が失敗することです。デバッグしたところ、変数のループをエコーアウトすることで while ループが正しく機能することがわかりました。私が得るエラーは、接続が閉じられているということです。

#!/bin/sh
source /home/ntadmin/webstats/bin/webstats.profile
source /home/ntadmin/webstats/bin/webstats.blogs.profile

DATE=`date +%m%d%Y`

SOURCE_FILE="`echo $WS_BC_SOURCE_FILE | sed -e 's/mmddyyyy/'$DATE'/'`"

IFS="," 
while read WS_BLOG_NAME WS_BLOG_SOURCE_VAR WS_BLOG_DEST_VAR WS_BC_SERVER1;
do


#Step 1 SFTP
cd $PERL_DIR
if $PERL_DIR/sftp.pl $WS_BC_SERVER1 $WS_BC_ID $WS_BC_PW $WS_BLOG_SOURCE_VAR/$SOURCE_FILE $WS_BLOG_DEST_VAR/$SOURCE_FILE
then
 echo 'SFTP complete'
else
 echo 'SFTP failed!'
 exit 1
fi

#Step 2 - Check that ftp was successful (that the files exist)
if [ -e $WS_BLOG_DEST_VAR/$SOURCE_FILE ]
then
echo "FTP of $WS_BLOG_SOURCE_VAR/$SOURCE_FILE from $WS_BC_SERVER1 was successful"
else
echo "FTP of $WS_BLOG_SOURCE_VAR/$SOURCE_FILE from $WS_BC_SERVER1 was not successful!"
exit 1
fi

done < blogs_array.txt
exit 0
4

1 に答える 1

1

何が間違っていたのかを判断するのに十分な情報はありませんが、ここにデバッグ方法があります。perl スクリプトの実際の sftp コマンドを次のようなデバッグ スクリプトに置き換えてみてください。問題をすばやく特定できるはずです。

#!/usr/bin/perl
print "arguments passed to $0\n";
$i=0;
while (defined $ARGV[$i]) {
  print "arg ".($i+1)." is <$ARGV[$i++]>\n"
}
于 2012-04-05T21:33:56.257 に答える