Ich schreibe ein Skript zu ssh in eine Liste von Maschinen und vergleichen Sie eine Variable mit einem anderen Wert .. Ich habe ein Problem (Ich habe ein paar Problemumgehungen, aber an dieser Stelle bin ich frage mich nur, warum diese Methode nicht funktioniert.Messy Bash Variable
VAR=`ssh $i "awk -F: '/^bar/ {print \$2}' /local/foo.txt"`
($ würde ich ein Hostname sein Die Gastgeber vertraut sind, ist keine Passwortabfrage gegeben.)
Beispiel foo.txt:
foo:123456:abcdef
bar:789012:ghijkl
baz:345678:mnopqr
Ich nehme an, es ist ein Problem, mit Anführungszeichen oder irgendwo gebraucht. Ich habe verschiedene Methoden ausprobiert (anders ausgedrückt, mit $() anstelle von ``, usw.), aber ich finde es nicht richtig. Mein Skript funktioniert ordnungsgemäß mit den folgenden:
VAR=`ssh $i "grep bar /local/foo.txt" | awk -F: '{print \$2}'`
Wie ich schon sagte, nur eine Neugier, jede Antwort wird geschätzt.
Forgot zu schreiben, was meine Ausgabe war: awk spuckt die gesamte übereinstimmende Zeile aus, nicht die zweite Sektion. Ich spielte mit den Anführungszeichen und es schien ein Fehler zu sein, dass "{print" Befehl nicht gefunden wurde usw., als ob dort irgendwo eine neue Zeile wäre.
Sie könnten mehr Antwort auf ServerFault, bezogen auf meine Frage dort: http://serverfault.com/ques/99886/ssh-not-redirecting-stdout-zu-lokal-terminal –
Was passiert, wenn Sie das Caret aus dem ersten Beispiel entfernen? Vielleicht gibt es am Anfang der Zeile ein unsichtbares Zeichen. – danben
@Lance Roberts - diese Frage bezieht sich auf awk, nicht auf ssh, und ist daher für Stack-Überlauf geeignet. – danben