ssh を使用すると 'export foo=1' が読み込まれないのはなぜですか?

ssh を使用すると 'export foo=1' が読み込まれないのはなぜですか?

ssh コマンドでリモート環境変数を明示的に設定しようとしています:

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

不思議なことに、これは空白行だけを出力しますが、同じコマンドをローカルで実行すると、正しく出力されます1

変数を明示的に設定しているのに、リモートで動作しないのはなぜですか?

答え1

$OPENBLAS_NUM_THREADSbashリモート マシンに送信される前に、ローカルで評価されます。

次のいずれかをエスケープする必要があります$:

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

または、bash 変数の評価を禁止する一重引用符を使用します。

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

関連情報