シェルスクリプトに環境変数を渡して、渡したものをエコーアウトしようとしています。この例では、$ HOMEは環境変数です。リモート拡張のためにssh経由で環境変数を渡す
./my_script.ksh $HOME
#! /usr/bin/ksh
my_var=${1}
echo "You sent: ${my_var}"
私は私の出力はYou sent: $HOME
になりたいではなく、それはそれを評価しているとYou Sent: /home/blah/usr
にこの点を生産しているが、私は私がする必要があるSSHコマンドを行う上で計画していることです各サーバーの$ HOMEは異なる値であり、SSHコマンドではサーバーからの値を使用したいので、$ my_varも評価されていません($ HOMEとも言います)。 SSHの間に正しく評価されるようにするだけです。
ここに私が何をしたいのかの例があります。のは、$ HOMEはすでに同じようServer1とServer2の上で設定されていると仮定しましょう:my_script.ksh $HOME
スクリプト実行のServer1から
Server1 $HOME: /home/blah/usr
Server2 $HOME: /home/superblah/newusr
ことの1本の余分のラインと、上記と同じである:
ssh [email protected] "echo Server got: $my_var"
何私現在の出力は:
You sent: /home/blah/usr
Server got: /home/blah/usr
私が欲しいのはちょうどそのssh comです製造するための義務:
Server got: /home/superblah/newusr
ありがとう。
明確にするために、[あなたの**リアル**質問](http://stackoverflow.com/questions/42400222/use:または、それが簡単に、シェルはあなたのためのエスケープ仕事をさせ作ります-remote-environment-variables-value-in-scp-path)は、SSHの代わりにSCPを使用することと非常に関連しています。 –
また、 '$ HOME'を使うことはやや誤解を招きます.SHCP接続やSSH接続が$ HOMEになったときに、デフォルトのリモートディレクトリに依存する回答に役立ちます。 –
ところで、私はksh93用のコードを書いています。もしあなたが 'foo = $(printf '%q' ...)'を 'printf -v foo '%q' ...、それ以外のものはそれほど変わらないだろう。一方、実際のものよりもkshのサードパーティのクローンを使用しているなら、私の最初のアドバイスは、本当のksh(速い、機能的で安定したものを望むならば)か、bashそれほど高速ではなく、積極的に維持されているもので、現在の4.xでは構文が異なっていても機能がほぼ完結しています)。 –