次のコマンドを実行して、リモートサーバーで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
できます。%q
printf
ssh user@host "$( printf '%q ' bash -c 'echo "$HOME"' )"
これは複数行コマンドにも当てはまります。
ssh user@host "$( printf '%q ' bash -c '
echo "home: $HOME"
echo "away: $AWAY"' )"
また見なさい: