3

$ 以外の値を返すにはどうすればよいですか? ssh セッションから

例えば:

x=5
echo "$x"
ssh -o StrictHostKeyChecking=no root@hostname "x=10"
echo "$x"

これは印刷されます

5
5

でも新しい価値が欲しい

5
10
4

2 に答える 2

15

これを試して:

x=5 
echo "$x"
x=$(ssh -o StrictHostKeyChecking=no root@hostname 'x=10; echo $x')
echo "$x"

ここで行われるのは、リモートで実行されたコマンドの出力をキャプチャし、その出力をローカル変数に割り当てることですx。リモートコマンドを引用するために、二重引用符ではなく一重引用符を使用したことに注意してください'x=10; echo $x'。二重引用符で囲まれた文字列は、リモートホストに送信される前に$xローカルの値に置き換えられるため、リモートコマンドによって5が出力され、ローカルに割り当てられます。xx

于 2012-12-20T16:30:58.750 に答える
1

あなたは次のようにそれを行うことができます:

x=5
echo "$x"
ssh -o StrictHostKeyChecking=no root@hostname 'x=10; exit $x'
echo "$?"

説明:

  • 'x=10; exit $x'ssh-これらは、でリモート実行するために通過する命令ですroot@hostname$xしたがって、ローカルシェルでの自動拡張を防ぐために、二重引用符ではなく一重引用符で囲む必要があります。
  • ここで微妙な違いに注意xしてください。ローカルシェルの変数は、セッションを介して生成されたリモートシェルの変数と同じではありません。xssh
  • $?は、ローカルシェルで最後に実行したコマンドの終了ステータスを格納する特別なシェル変数です。sshで終了するようにセッションに指示したので10、それが印刷されますecho "$?"
于 2012-12-20T16:30:20.120 に答える