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

を '{$ 2印刷}' - awk -F\" '{print $2}'、それは私のコード破ったSSH "のawk -F" 私はこの表現に問題がある」

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

私はそれで何ができる?

+0

使用: ' '\' '':引用符+各単一引用符を置き換えるためのバックスラッシュ+引用符+引用 –

+0

あなたはSSH SINGで囲まれた文字列を送信します。リモートマシンへの接続に成功した後に実行するコマンドが含まれています。あなたのコマンド文字列の中に、一重引用符があります。前のコメントでF. Hauriが説明した方法を使用して文字列の一部と見なされるように、それらを「エスケープ」する必要があります。 – JNevill

+0

* "この表現に問題があります...コードが壊れました" * - どうですか?問題またはエラーとは何ですか?スタックオーバーフローはあなたからの閉鎖理由を隠すので:*デバッグのヘルプを求める質問( "なぜこのコードは機能していないの?")は、質問自体にそれを再現するのに必要な特定の問題やエラー、 。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:[最小限で完全で検証可能なサンプルの作成方法](https://stackoverflow.com/help/mcve)。* – jww

答えて

1

あなたは、doc、ここで使用することができ

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。 '<<<'はinline docと '<<(cmd)'を意味します(2つの '<'!の間に空白があります)。 'man bash'を見てください!! –

+0

こんにちはF.ホウリ、私は本当に混乱しています。 'cmd <<< string'(これは*ここではbashのstring *と呼ばれます)は基本的に' echo string | cmd'。 – pynexj

関連する問題