Linux

使用 GNU screen 連續執行命令(下一個僅在前一個完成後執行)

  • May 22, 2020

我正在嘗試使用螢幕命令一個接一個地堆疊多個命令。首先我執行一個 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"

引用自:https://unix.stackexchange.com/questions/588237