Warum wird „export foo=1“ nicht gelesen, wenn ich SSH verwende?

Warum wird „export foo=1“ nicht gelesen, wenn ich SSH verwende?

Ich versuche, eine Remote-Umgebungsvariable explizit in einem SSH-Befehl festzulegen:

ssh worker-2 "export OPENBLAS_NUM_THREADS=1; echo $OPENBLAS_NUM_THREADS"

Seltsamerweise wird dadurch nur eine leere Zeile gedruckt, aber wenn ich denselben Befehl lokal ausführe, wird er korrekt gedruckt 1.

Da ich die Variable explizit festlege, warum funktioniert es dann nicht remote?

Antwort1

$OPENBLAS_NUM_THREADSwird lokal ausgewertet, bashbevor es an Ihren Remotecomputer gesendet wird.

Sie müssen entweder Folgendes escapen $:

ssh worker-2 "export OPENBLAS_NUM_THREADS=1; echo \$OPENBLAS_NUM_THREADS"

oder verwenden Sie einfache Anführungszeichen, die die Auswertung der Bash-Variablen verhindern:

ssh worker-2 'export OPENBLAS_NUM_THREADS=1; echo $OPENBLAS_NUM_THREADS'

verwandte Informationen