Ich erhalte einen seltsamen Fehler durch den folgenden awk-Befehl unter Linux


1
`awk '{print "ssh -q " $1 " \"echo && hostname && df -h | grep /usr\";"}' essentials`

Es soll eine Verbindung zu einer Reihe von Hostnamen aus der Datei "essentials" herstellen und deren Speicherplatznutzung wiedergeben. Wenn ich die Back Ticks los werde, können Sie sehen, was ausgeführt wird:

ssh -q hostname1 "echo && hostname && df -h | grep /usr";
ssh -q hostname2 "echo && hostname && df -h | grep /usr";
ssh -q hostname3 "echo && hostname && df -h | grep /usr";

Tatsächliche Ausgabe:

-bash-3.2$ `awk '{print "ssh -q " $1 " \"echo && hostname && df -h | grep /usr\";"}' essentials`
bash: echo && hostname && df -h | grep /usr: No such file or directory

hostname2
/dev/xvda3             23G   13G  9.2G  59% /usr

hostname3
/dev/xvda3             23G  1.5G   21G   7% /usr

Irgendwelche Ideen, warum dieser erste Befehl nicht funktioniert?


Was ist das? essentials Inhalt?
BloodPhilia

Essentials enthält Hostnamen ... 1 pro Zeile.
Nick

Antworten:


3

Das ist, weil echo && hostname && df -h | grep /usr wird als einzelner Befehl behandelt, verwenden Sie stattdessen diesen Befehl:

`awk '{print "ssh -q " $1 " bash -c \"echo && hostname && df -h | grep /usr\";"}' essentials`

1
xargs --arg-file essentials -I {} ssh -q \{\} bash -c "echo && hostname && df -h | grep /usr"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.