使用 GNU screen 连续运行命令(下一个命令仅在前一个命令完成后运行)

使用 GNU screen 连续运行命令(下一个命令仅在前一个命令完成后运行)

我正在尝试使用屏幕命令将多个命令依次堆叠。首先我运行一个 python 脚本,然后像这样连接到 ssh 主机。

$HOSTNAME 是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”运行脚本 pyscript1.py,并且仅当该命令完成时,我想使用该命令连接到远程主机以更改文件。

exec bash 的目的是即使在命令完成后也保持屏幕打开。

当我单独键入 sed 命令时,它会起作用。

我还可以使用创建一个名为“1”的屏幕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"

什么都没发生

我究竟做错了什么?

答案1

有几个引用问题。

原来的:

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"

相关内容