Ich habe diesen Code:
HOSTS="host1 host2"
For hostname in ${HOSTS} ;
do ssh -tt ${USERNAME}@${hostname} << EOF
HOSTSN="test"
echo ${HOSTSN}
exit
EOF
Done
Die Variable HOSTSN
ist leer. Können Sie mir sagen, warum?
Antwort1
HOSTSN ist leer, da es zum Zeitpunkt der
do ssh -tt ${USERNAME}@${hostname} << EOF
Ausführung. Die Verwendung von echo \${HOSTSN}
stattdessen behebt das Problem.
Betrachten Sie dieses Beispiel. Hier wird eine Datei „foo“ erstellt. Der Inhalt wird zum Zeitpunkt der Dateierstellung nicht ausgeführt. Es $NAME
ist also nichts festgelegt.
$ cat >foo <<EOF
NAME=Steve
echo Hello ${NAME}
EOF
$
$ cat foo
Hello
$
Durch die Einführung eines \
Zeichens wird die Variable bei der Dateierstellung nicht ausgewertet.
$ cat >foo <<EOF
NAME=Steve
echo Hello \${NAME}
EOF
$
$ cat foo
Hello Steve
$