Übergeben einer Umgebungsvariable über SSH

Übergeben einer Umgebungsvariable über SSH

Ich versuche, mit dem folgenden Code eine Umgebungsvariable an einen Remote-Host zu übergeben.

ssh username@ip "env current_quarter=$current_quarter" sh -s << 'EOF' 
pwd 
echo "${current_quarter}" 
EOF

pwddruckt den richtigen Standort auf dem Remote-Host, aber echo "${current_quarter}"nicht das aktuelle Quartal.

Antwort1

Durch das Einfügen EOFvon Anführungszeichen weisen Sie die lokale Shell an, das Here-Dokument nicht zu expandieren, bevor es an ssh übergeben wird. Laut derBash-Dokumentationdies gilt für Parametererweiterung, Befehlsersetzung und arithmetische Erweiterung.

Im Gegensatz zu dem, was ich beim ursprünglichen Schreiben dieser Antwort dachte, ist die Remote-Shell hiervon nicht betroffen und führt das Dokument hier so aus, wie Sie es direkt in der Remote-Shell geschrieben haben (einschließlich aller Arten von Erweiterungen und Ersetzungen, die in der lokalen Shell durch Anführungszeichen übersprungen wurden EOF).

Wenn Sie nur die lokale Variable verwenden möchten, testentfernen Sie die Anführungszeichen aus dem EOF:

ssh user@host sh -s <<EOF
pwd
echo $test
EOF

Für Fischbenutzer würde es folgendermaßen aussehen:

ssh user@host "\
pwd
echo $test
"

testWenn Sie nun die lokale Variable als Remote-Variable übergeben remote_testund nicht lokal erweitern möchten, maskieren Sie die Variable einfach mit einem Backslash:

ssh user@host sh -s <<EOF
export remote_test=$test
pwd
echo "\${remote_test}"
EOF

Bearbeiten:

Läuft:

ssh user@host "env remote_test=$test" sh -s <<'EOF'
pwd
echo "${remote_test}"
EOF

sollte dem dritten Codebeispiel entsprechen, mit der Ausnahme, dass es envnicht Teil der Shell ist und auch in Nicht-Bourne-Shells verwendet werden kann.

(Dies ist jedoch identisch mit dem Codebeispiel, das OP angegeben hat. Da OP diese Antwort jedoch als richtig markiert hat, vermute ich, dass sich „env“ und „export“ bei bestimmten Zeichenfolgen unterschiedlich verhalten. Ich habe jedoch keine schlüssigen Beweise für diese Hypothese gefunden.)

verwandte Informationen