【问题标题】:Passing a bash command to a remote host using ssh使用 ssh 将 bash 命令传递给远程主机
【发布时间】:2015-07-05 00:32:00
【问题描述】:

做一个迁移我的代码是

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:命令。 line:1: ^ 意外的换行符或字符串结尾"

有什么修复建议吗?

【问题讨论】:

  • 您的“内部”单引号根本不是“内部”。他们正在结束(并重新启动)外部单引号字符串。你需要逃离他们。将它们替换为'\''(单引号反斜杠单引号单引号)。

标签: bash shell awk ssh


【解决方案1】:

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

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

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

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

【讨论】:

  • 是的,这是更好的方法 +1
  • 它解决了你的问题吗,@JosephKisanue ?由于您是新来的,如果您的问题已经解决,请不要忘记将答案标记为已接受。您可以单击答案旁边的复选标记将其从空心切换为绿色。如有任何问题,请参阅Help Center > Asking
猜你喜欢
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2023-03-17
  • 2017-07-22
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多