Ich habe folgendes in einem Skript
for server in ${servers[@]}; do
echo ${server}
ssh user@${server} "for i in /tmp/foo* ; do echo ${i}; done"
done
Aber es funktioniert nicht. Seltsame Sache, ich sehe $ I Anzahl der Rückleitungen. Wenn ich also zehn Dateien habe, sehe ich zehn leere Zeilen.
--sshlogin
Option von GNU Parallel an .Antworten:
Ihre lokale Shell interpretiert das
${i}
innerhalb von doppelten Anführungszeichen ("
), sodass der Befehl wie folgt funktioniertVerwenden Sie
'
stattdessen einfach einfache Anführungszeichen ( ) und Ihr Problem verschwindet:quelle
Ich bin gerade vor einiger Zeit auf dieses Problem gestoßen, und die angegebene Lösung, obwohl sie funktioniert, ist nicht allzu effektiv, wenn Sie auch Variablen aus der lokalen Shell abrufen, bevor Sie mit ssh ein Array erstellen, über das Sie iterieren können. Etwas chaotischer wäre es, zunächst nur dem $ zu entkommen, also wäre es so
"for i in /tmp/foo* ; do echo \${i}; done"
Welches würde es innerhalb des lokalen Konstrukts entkommen, nicht die aufgerufene ssh-Shell.
quelle
Ich habe die obige Antwort aktualisiert, um auch Ports aus einer Liste zu erhalten.
quelle