ssh在bash中突破了while-循环。我使用这个bash代码将文件上传到远程服务器,对于普通文件来说,这很好:for i in `find devel/ -newer $UPLOAD_FILE`do
echo "Upload:" $i if [ -d $i ]
then
echo "Creating directory" $i
ssh $USER@$SERVER "cd ${REMOTE_PATH}; mkdir -p $i"
continue
fi
if scp -Cp $i $USER@$SERVER:$REMOTE_PATH/$i then
echo "$i OK"
else
echo "$i NOK"
rm ${UPLOAD_FILE}_tmp fidone唯一的问题是,对于名称中有空格的文件,for-循环失败,所以我替换了第一行,如下所示:find devel/ -newer $UPLOAD_FILE | while read ido
echo "Upload:" $i if [ -d $i ]
then
echo "Creating directory" $i
ssh $USER@$SERVER "cd ${REMOTE_PATH}; mkdir -p $i"
continue
fi
if scp -Cp $i $USER@$SERVER:$REMOTE_PATH/$i then
echo "$i OK"
else
echo "$i NOK"
rm ${UPLOAD_FILE}_tmp fidone由于一些奇怪的原因,ssh命令脱离了while-循环,因此第一个丢失的目录被创建得很好,但是所有随后丢失的文件/目录都被忽略了。我想这与ssh编写一些混淆了“read”命令的stdout有关。注释掉ssh-命令使循环按其应有的方式工作。有谁知道为什么会发生这种情况,以及如何防止ssh中断while-循环?
3 回答

慕运维8079593
TA贡献1876条经验 获得超5个赞
ssh
ssh $USER@$SERVER "cd ${REMOTE_PATH}; mkdir -p $i" < /dev/null
ssh -n

慕田峪7331174
TA贡献1828条经验 获得超13个赞
$1
$REMOTE_PATH
. printf %q
添加回答
举报
0/150
提交
取消