Linux
在一個 SSH 命令中執行多項操作
我有一個命令,
# ssh -t computer.A 'command'
在電腦上執行一個簡單的命令。通過 SSH 遠端執行。
除此之外,我想通過computer.A在computer.B上執行命令。在我的腦海中,它看起來像這樣:
# ssh -t computer.A 'ssh -t computer.B 'shutdown -p now' shutdown -p now'
該命令會先關閉computer.B,然後關閉computer.A,但它只關閉computer.B,而忽略關閉computer.A的命令。
出了什麼問題?
您需要轉義引號並將兩個命令彼此分開。
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'
想像一下在電腦 A 上。您想關閉電腦 B。您如何做到這一點?
你打字,
ssh -t computer.B 'shutdown -p now'
現在您想在您的電腦上執行**該命令(“ssh -t computer.B…”)。您需要引用它,但在命令中已經有兩個引號,因此您需要將它們轉義:
ssh -t computer.A 'ssh -t computer.B \'shutdown -p now\''
實際上你想執行兩個命令,所以你需要將它添加到外引號內:
ssh -t computer.A 'ssh -t computer.B \'shutdown -p now\'; shutdown -p now'
如果您想通過從外部連接到電腦來重複此操作,只需沖洗並重複:
- 第一階段,轉義所有引號和所有斜杠,so
\
become\\
和'
become\'
。這意味著\'
變成\\\'
:ssh -t computer.A \'ssh -t computer.B \\\'shutdown -p now\\\'; shutdown -p now\'
- 第二階段:用引號括起來,添加關閉命令並添加 ssh 指令:
ssh -t mycomputer 'ssh -t computer.A \'ssh -t computer.B \\\'shutdown -p now\\\'; shutdown -p now\'; shutdown -p now'