我试图在两台机器之间压缩脚本每日文件传输。该脚本在目标计算机上运行,并从源计算机中提取文件。有时,源计算机没有准备好文件,这是可以接受的。
我希望脚本在成功传输时退出0,并且当没有可用文件传输时。我希望脚本在任何其他故障条件(连接等)上退出非0。
我尝试了以下两种方法,我发现SCP无论实际错误是什么,返回代码总是1,因此脚本难以区分我可接受的错误条件和其他错误条件。
无论命令发生什么,sftp方法似乎总是返回0。有什么建议?
scpGet(){
echo "Attempting File Transfer"
scp -P $REMOTEPORT $REMOTEHOST:$REMOTEPATH $LOCALPATH
echo $?
}
sftpGet(){
cd $LOCALPATH
sftp -P $REMOTEPORT $REMOTEHOST << EOF
get $REMOTEPATH
quit
EOF
echo $?
}
答案 0 :(得分:0)
我还没有对此进行验证,所以请检查它实际上是否符合您的要求 - 但是你显然没有密码运行scp,所以你可以远程执行任意代码来测试文件是否存在。小心点。
scpGet() {
echo "Attempting File Transfer"
if scp -P $REMOTEPORT $REMOTEHOST:$REMOTEPATH $LOCALPATH
then echo "$( ls -l $LOCALPATH) - successfully retrieved"
elif ssh -P $REMOTEPORT ls -l $REMOTEHOST:$REMOTEPATH
then echo "$REMOTEHOST:$REMOTEPATH exists, but I can't retrieve it!" >&2
exit $oopsieCode
elif (( 2 == $rc )) # ls failed to find the file - verify this code
then echo "File not ready. Ignoring."
else : handle errors other than "not found"
fi
}