Wie kann man einen Index in einer 'for-Schleife' drucken, die auf einem Remote-Host über SSH ausgeführt wird?

0

Ich möchte in einen Remote-Host ssh und dann eine for-Schleife ausführen, die eine Folge von Zahlen durchläuft, um die Anzahl der verschiedenen Knoten zu steuern.

ssh user@host /bin/bash << EOF
for i in {1..10}
do
echo $i
done
EOF

In diesem Fall werden nur 10 Leerzeilen ausgegeben, anstatt Zahlen von 1 bis 10 auszudrucken.

Wenn ich denselben Code auf meinem lokalen Computer ausführe, erhalte ich die gewünschte Ausgabe, dh zehn Zeilen pro Zeile, die von 1 bis 10 gedruckt werden.

Wie würde man die beabsichtigte Funktionalität erreichen, die darin besteht, auf den Index in einer for-Schleife zuzugreifen, die in SSH ausgeführt wird?

YShin
quelle
1
hast du eval probiert Ich vermute das $iwird lokal erweitert, bevor man es per ssh rüber schickt.
Eugen Rieck

Antworten:

1

Aus dem Bash-Handbuch :

Here Documents
Das Format von Here-Dokumenten ist:

<<[-]word
        here-document
delimiter

[...] Wenn in einem Wort Zeichen in Anführungszeichen gesetzt werden, ist das Trennzeichen das Ergebnis der Entfernung von Anführungszeichen in einem Wort, und die Zeilen im Hier-Dokument werden nicht erweitert. Wenn das Wort nicht in Anführungszeichen gesetzt ist, werden alle Zeilen des vorliegenden Dokuments einer Parametererweiterung, einer Befehlssubstitution und einer arithmetischen Erweiterung unterzogen.

Lass es uns versuchen:

$ i='Howdy!'
$ ssh user@localhost /bin/bash << EOF
for i in {1..10}
do
echo $i
done
EOF
Howdy!
Howdy!
Howdy!
Howdy!
Howdy!
Howdy!
Howdy!
Howdy!
Howdy!
Howdy!
$ ssh user@localhost /bin/bash << 'EOF'
for i in {1..10}
do
echo $i
done
EOF
1
2
3
4
5
6
7
8
9
10
$
Kenster
quelle