$ 以外の値を返すにはどうすればよいですか? ssh セッションから
例えば:
x=5
echo "$x"
ssh -o StrictHostKeyChecking=no root@hostname "x=10"
echo "$x"
これは印刷されます
5
5
でも新しい価値が欲しい
5
10
これを試して:
x=5
echo "$x"
x=$(ssh -o StrictHostKeyChecking=no root@hostname 'x=10; echo $x')
echo "$x"
ここで行われるのは、リモートで実行されたコマンドの出力をキャプチャし、その出力をローカル変数に割り当てることですx
。リモートコマンドを引用するために、二重引用符ではなく一重引用符を使用したことに注意してください'x=10; echo $x'
。二重引用符で囲まれた文字列は、リモートホストに送信される前に$x
ローカルの値に置き換えられるため、リモートコマンドによって5が出力され、ローカルに割り当てられます。x
x
あなたは次のようにそれを行うことができます:
x=5
echo "$x"
ssh -o StrictHostKeyChecking=no root@hostname 'x=10; exit $x'
echo "$?"
説明:
'x=10; exit $x'
ssh
-これらは、でリモート実行するために通過する命令ですroot@hostname
。$x
したがって、ローカルシェルでの自動拡張を防ぐために、二重引用符ではなく一重引用符で囲む必要があります。x
してください。ローカルシェルの変数は、セッションを介して生成されたリモートシェルの変数と同じではありません。x
ssh
$?
は、ローカルシェルで最後に実行したコマンドの終了ステータスを格納する特別なシェル変数です。ssh
で終了するようにセッションに指示したので10
、それが印刷されますecho "$?"