2012-04-05 2 views
0

Я пытаюсь написать сценарий оболочки, который захватывает набор параметров из текстового файла, а затем выполняет SFTP на основе этих параметров. В основном, я беру ежедневный журнал webstats и перемещаю его в центральное место.Присвоение переменных приводит к сбою SFTP

Проблема, с которой я столкнулась, заключается в том, что 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 
+0

Вы считаете, что 'sftp.pl' работает так, как должно? Вы хотите разместить ссылку на 'stfp.pl' (или сам скрипт, если он достаточно короткий)? – thb

+4

99 раз из 100 проблема в том, что один из параметров в строке sftp.pl имеет в нем пробел, в результате чего параметры заканчиваются не в порядке. Попробуйте инкапсулировать все параметры в sftp.pl в двойных qoutes '' ' – Petesh

ответ

1

Недостаточно информации для определения того, что было не так, но вот способ отладки. Попробуйте заменить действительную команду sftp в perl-скрипте таким сценарием отладки, вы сможете быстро найти проблему.

#!/usr/bin/perl 
print "arguments passed to $0\n"; 
$i=0; 
while (defined $ARGV[$i]) { 
    print "arg ".($i+1)." is <$ARGV[$i++]>\n" 
}