【问题标题】:ssh "awk -F" '{print $2}' "ssh "awk -F" '{打印 $2}' "
【发布时间】:2017-07-08 23:03:06
【问题描述】:
for VM in $VM_LIST;do
    ssh 10.0.0.163 "mkdir $ROOT$VM`date +%F`"
    ssh 10.0.0.163 'find -name "$VM.vmx" | xargs grep -r vmdk >/vmkd.list | cat /vmkd.list | awk -F\" '{print $2}' | while read list; do find -name "$list" ;done'
done

我对这个表达式有疑问 - awk -F\" '{print $2}',它破坏了我的代码

awk: cmd. line:1: Unexpected end of string

我能用它做什么???

【问题讨论】:

  • 使用:'\'':引号+反斜杠+引号+引号替换每个单引号。
  • 您向 SSH 发送一个用单引号括起来的字符串,其中包含您在成功连接到远程计算机后要运行的命令。在您的命令字符串中,您有单引号,有效地过早地结束了您的字符串。您必须使用 F. Hauri 在上一条评论中解释的方法“转义”它们,以便将它们视为字符串的一部分。
  • “我的这个表达式有问题......它破坏了我的代码” - 怎么办?什么是问题或错误?由于 Stack Overflow 向您隐藏了关闭原因:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example

标签: bash awk ssh


【解决方案1】:

你可以在这里使用文档

for VM in $VM_LIST;do
    ssh 10.0.0.163 /bin/sh <<"eocmd"
mkdir $ROOT$VM`date +%F`
find -name "$VM.vmx" |
    xargs grep -r vmdk >/vmkd.list |
    cat /vmkd.list |
    awk -F\" '{print $2}' |
    while read list; do
        find -name "$list"
    done
eocmd
done

【讨论】:

  • &lt;&lt;&lt; 应该是&lt;&lt;
  • @whjm 没有。 &lt;&lt;&lt; 表示内联文档,&lt; &lt;(cmd)(注意,两个 &lt; 之间有一个空格!)表示内联命令。见man bash!!
  • 嗨,F. Hauri,我真的很困惑。 cmd &lt;&lt;&lt; string(在 bash 中称为 here string)基本上与 echo string | cmd 含义相同。
  • 对不起,我错了。 &lt;&lt; 这里是文档,&lt;&lt;&lt;"" 这里是字符串,&lt; &lt;() 这里是命令。我用 1 &lt; 太多了!
  • 你能不能把inline doc换成here document
猜你喜欢
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 2018-07-12
  • 2011-04-29
  • 2011-07-03
相关资源
最近更新 更多