使用ssh将bash命令传递给远程主机

时间:2015-04-26 17:13:38

标签: bash shell awk ssh

进行迁移我的代码是

cat /etc/fstab |grep nfs >/root/mounts.txt
cat /etc/fstab |grep cifs >> /root/mounts.txt
rsync -av /root/mounts.txt                              ${REMOTEHOST}:/root/
ssh root@${REMOTEHOST} 'cat /root/mounts.txt >> /etc/fstab'
ssh root@${REMOTEHOST} 'for i in $(cat /root/mounts.txt |awk '{print $2}');do mkdir -p $i; done'

问题是最后一行在本地工作:

 for i in $(cat /root/mounts.txt |awk '{print $2}');do mkdir -p $i; done 

然而,当我将它传递给远程主机时,我得到了:

  

" {打印

     

awk:cmd。 line:1:^意外的换行符或字符串结尾"

有任何修复建议吗?

1 个答案:

答案 0 :(得分:2)

这是因为在编写ssh表达式的第一个引号时,awk中提供的命令会停止。

所以你可能想要使用另一种方法:

ssh root@${REMOTEHOST} 'while read -r _ host _; do mkdir -p $host; done < /root/mounts.txt'

这使用while read variable1 variable2 variable3,因此您无需使用awk来获取第二个值。