使用 ssh 将 bash 命令传递给远程主机
Passing a bash command to a remote host using 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 }');do mkdir -p $i; done'
问题是最后一行在本地有效:
for i in $(cat /root/mounts.txt |awk '{print }');do mkdir -p $i; done
然而,当我将它传递给远程主机时,我得到:
" {print
awk: cmd. line:1: ^ unexpected newline or end of string"
有什么修复建议吗?
这是因为 ssh
中提供的命令在写入 awk
表达式的第一个引号时停止。
所以您可能想使用另一种方法:
ssh root@${REMOTEHOST} 'while read -r _ host _; do mkdir -p $host; done < /root/mounts.txt'
这使用 while read variable1 variable2 variable3
这样您就不需要使用 awk
来获取第二个值。
进行迁移我的代码是
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 }');do mkdir -p $i; done'
问题是最后一行在本地有效:
for i in $(cat /root/mounts.txt |awk '{print }');do mkdir -p $i; done
然而,当我将它传递给远程主机时,我得到:
awk: cmd. line:1: ^ unexpected newline or end of string"
有什么修复建议吗?
这是因为 ssh
中提供的命令在写入 awk
表达式的第一个引号时停止。
所以您可能想使用另一种方法:
ssh root@${REMOTEHOST} 'while read -r _ host _; do mkdir -p $host; done < /root/mounts.txt'
这使用 while read variable1 variable2 variable3
这样您就不需要使用 awk
来获取第二个值。