我正在尝试使用屏幕命令将多个命令依次堆叠。首先我运行一个 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"