SSHコマンドを実行して変数をリモートで拡張する方法

SSHコマンドを実行して変数をリモートで拡張する方法

次のコマンドを実行して、リモートサーバーでHOME変数を拡張したいと思います。

ssh user@host bash -c "'echo ${HOME}'"

しかし、代わりにこれはローカルに拡張されます。

リモートHOME変数を取得するには?

答え1

HOME環境変数のリモート値を取得することが目的であれば、実行する方が簡単です。

ssh user@host printenv HOME

これは、リモートシェルまたはシステムにユーティリティがある限り機能しますprintenv


変数HOMEが二重引用符で囲まれた文字列内にあるため、ローカルに展開されます。

代わりに、次のいずれかを実行してください。

ssh user@host 'bash -c "echo \"\$HOME\""'

または

ssh user@host 'bash -c '"'"'echo "$HOME"'"'"

上記の最初のケースでは、リモートシェルは次のコマンドを受け取ります。

bash -c "echo \"\$HOME\""

実装する。

第二に、

bash -c 'echo "$HOME"'

ローカルシェルがまたはzshある場合は、書式指定子を使用してリモートシェルに適切に引用符付きの文字列を設定bashできます。%qprintf

ssh user@host "$( printf '%q ' bash -c 'echo "$HOME"' )"

これは複数行コマンドにも当てはまります。

ssh user@host "$( printf '%q ' bash -c '
echo "home: $HOME"
echo "away: $AWAY"' )"

また見なさい:

関連情報