2017-07-07 93 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