Linux
使用 GNU screen 連續執行命令(下一個僅在前一個完成後執行)
我正在嘗試使用螢幕命令一個接一個地堆疊多個命令。首先我執行一個 python 腳本,然後像這樣連接到一個 ssh 主機。
$ HOSTNAME is slave-node-1 $ arg 是 arg2
screen -dmS 1 sh -c "python3 pyscript1.py arg && \ ssh -i ~/.ssh/my-ssh-key user@remote-node \ "sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/' ~/test.txt"\ ;exec bash"
我使用 screen 的原因是因為這不是我需要執行的唯一命令,而且我需要能夠在 pyscript1.py 執行時監控它的輸出。
該命令應該創建名為“1”的新螢幕,使用arg“arg”執行腳本pyscript1.py,並且只有當該命令完成時,我才想使用該命令連接到遠端主機以進行更改一份文件。
exec bash 旨在即使在命令完成後也保持螢幕打開。
sed 命令在我單獨鍵入時有效。
我還可以使用
screen -dmS 1
.我還可以使用 SSH 連接到伺服器。
但是,當我執行上述命令時,什麼也沒有發生。甚至沒有創建新螢幕。
當我跑步時
ssh -i ~/.ssh/my-ssh-key user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$ 1/' test.txt"
我得到了想要的效果
但是當我嘗試
screen -dmS 1 sh -c "ssh -i ~/.ssh/my-ssh-key user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$ 1/' test.txt";exec bash"
什麼都沒發生
我究竟做錯了什麼?
有幾個引用問題。
原來的:
screen -dmS 1 sh -c "python3 pyscript1.py arg && ssh -i ~/.ssh/my-ssh-key user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/ ~/test.txt;exec bash"
帶換行符的可讀版本
screen -dmS 1 sh -c "python3 pyscript1.py arg && ssh -i ~/.ssh/my-ssh-key "\ "user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/ ~/test.txt;exec bash"
我猜是
"sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/ ~/test.txt"
應該是 的論據
ssh
。更正的程式碼:
screen -dmS 1 sh -c "python3 pyscript1.py arg && ssh -i ~/.ssh/my-ssh-key "\ "user@remote-node \"sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/' ~/test.txt\";"\ "exec bash"