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

Ich habe ein Problem mit diesem Ausdruck - awk -F\" '{print $2}', brach es meinen Code

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

Was kann ich damit machen ???

+0

Verwendung: ' '\'' ': quote + Backslash + Zitat + Zitat für jeden Apostroph ersetzt –

+0

Sie SSH senden eine Zeichenfolge eingeschlossen in singen. Die Anführungszeichen, die die Befehle enthalten, die Sie nach der erfolgreichen Verbindung mit Ihrem Remote-Computer ausführen müssen. Innerhalb Ihrer Befehlsfolge stehen einfache Anführungszeichen, die die Zeichenfolge vorzeitig beenden. Sie müssen diese "entkommen", so dass sie als Teil der Kette betrachtet werden, indem Sie die Methode verwenden, die F. Hauri im vorherigen Kommentar erklärt. – JNevill

+0

* "Ich habe ein Problem mit diesem Ausdruck ... es hat meinen Code zerstört" * - Wie? Was ist ein Problem oder ein Fehler? Da Stack Overflow den Schließen-Grund von Ihnen verbirgt: * Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler und den kürzesten Code enthalten, um es in der Frage selbst zu reproduzieren . Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (https://stackoverflow.com/help/mcve). * – jww

Antwort

1

könnten Sie hier verwenden 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

'<<<' sollte '<<' sein? – pynexj

+0

@whjm Nr. '<<<' bedeutet inline doc und '<<(cmd)' (Vorsicht, es gibt einen Abstand zwischen zwei '<'!) meinen Inline-Befehl. Siehe 'Mann bash' !! –

+0

Hallo F. Hauri, ich bin wirklich verwirrt. 'cmd <<< string' (es heißt * hier string * in bash) bedeutet im Grunde dasselbe wie' echo string | cmd'. – pynexj