Assigning variables causes SFTP to fail

Go To StackoverFlow.com

0

I'm trying to write a shell script that grabs a set of parameters from a text file and then performs SFTP based on those parameters. Basically, I'm taking a daily webstats log and moving it to a central location.

The issue I'm having is that the the SFTP fails based on the way I am assigning variables. I have debugged and found that the while loop works correctly by echoing out the loop of variables. The error I get is that the connection is closed.

#!/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
2012-04-05 19:11
by user448948
Do you believe that sftp.pl is working as it ought? Would you like to post a link to stfp.pl (or the script, itself, if short enough) - thb 2012-04-05 19:28
99 times out of 100 the problem is that one of the parameters on the line to sftp.pl has a space in it, causing the parameters to end up out of order. Try encapsulating all the parameters to sftp.pl in double qoutes "Petesh 2012-04-05 19:33


1

There is not enough information to determine what was wrong, but here is a debugging method. Try replace the actual sftp command in perl script with a debug script like this, you should be able to locate the problem quickly.

#!/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-05 21:33
by pizza
Ads