私に命令があります。
# ssh -t computer.A 'command'
SSH経由でコンピュータからリモートで簡単なコマンドを実行します。
それに加えて、コンピュータAを介してコンピュータBからコマンドを実行したいと思います。私の考えは次のとおりです。
# ssh -t computer.A 'ssh -t computer.B 'shutdown -p now' shutdown -p now'
このコマンドは、コンピュータBを最初にシャットダウンしてからコンピュータAをシャットダウンしますが、コンピュータBのみをシャットダウンし、コンピュータAをシャットダウンするコマンドは無視します。
何が間違っていますか?
答え1
引用符をエスケープし、これら2つのコマンドを互いに分離する必要があります。
ssh -t computer.A 'ssh -t computer.B \\'shutdown -p now\\'; shutdown -p now'
最初のシャットダウンが成功した場合にのみコンピュータの2番目のシャットダウンを実行するには、;
に置き換えます&&
。
次のように代替参照を使用することもできます。
ssh -t computer.A 'ssh -t computer.B "shutdown -p now"; shutdown -p now'
答え2
コンピュータAにいると想像してください。 Bコンピュータをシャットダウンしようとしています。どうすればいいですか?
あなたは入力、
ssh -t computer.B 'shutdown -p now'
今実行したいと思います。それコマンド("ssh -t computer.B...")あなたのコンピュータ。引用する必要がありますが、コマンドにはすでに2つの引用があります。脱出するそれらを:
ssh -t computer.A 'ssh -t computer.B \'shutdown -p now\''
実際には2つのコマンドを実行したいので、二重引用符で囲む必要があります。
ssh -t computer.A 'ssh -t computer.B \'shutdown -p now\'; shutdown -p now'
欲しいなら繰り返し外部からコンピュータに接続したら、すすぎ、繰り返します。
最初のステップで、すべての引用符をエスケープします。そしてすべてのスラッシュだから、
\
これ\\
は次の意味になります。'
\'
\'
\\\'
ssh -t computer.A \'ssh -t computer.B \\\'shutdown -p now\\\'; shutdown -p now\'
ステップ2:引用符で囲み、shutdownコマンドを追加し、その前にsshコマンドを追加します。
ssh -t mycomputer 'ssh -t computer.A \'ssh -t computer.B \\\'shutdown -p now\\\'; shutdown -p now\'; shutdown -p now'