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

标签 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 

但是,当我将其传递给远程主机时,我得到:

" {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来获取第二个值。

关于bash - 使用ssh将bash命令传递到远程主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29880767/

相关文章:

bash - 不带引号的 Heredoc 不扩展参数

shell - 用于从 ftp 中删除旧文件的 Linux shell 脚本

mysql - 在 bash 流中压缩文件时保留文件名

shell - 如果行中的特定数字大于数字,则 awk 获取第一列

Linux CP 使用 AWK 输出

linux - 根据文件名条件复制文件

linux - 在 bash 中跳过(转到)一段代码?

linux - 从远程服务器并行复制小文件

mysql - 使用 shell 脚本删除多个 mysql 数据库

split - 在 awk 中增加字母变量