2017-07-07 94 views
-2
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 

我能做些什么在于:

+0

使用:'“\”'':报价+反斜杠+报价+报价为替换每个单引号 –

+0

您发送SSH封闭在唱串。包含在成功连接远程计算机后运行的命令。在你的命令字符串中,你有单引号,有效地结束你的字符串过早。你必须“逃避”那些,以便使用F. Hauri在前面的评论中解释的方法将它们视为字符串的一部分。 – JNevill

+0

*“我对这个表达式有问题......它破坏了我的代码”* - 怎么回事?什么是问题或错误?由于Stack Overflow隐藏了你的密切原因:*寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现它的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:[如何创建最小,完整和可验证的示例](https://stackoverflow.com/help/mcve)。* – jww

回答

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 
+0

'<<<'应该是'<<'? – pynexj

+0

@whjm no。 ''<''表示内联文档和'<(cmd)'(小心,两个'<!!“之间有空格)。见'男子bash'! –

+0

嗨F. Hauri,我真的很困惑。 'cmd <<< string'(在bash中叫做* here string *)基本上和'echo string |相同cmd'。 – pynexj