gpt4 book ai didi

linux - Bash:使用 SSH 启动长时间运行的远程命令并收集其 PID

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:44 25 4
gpt4 key购买 nike

当我执行以下操作时,我必须在之后按 CTRL-c 否则 shell 会表现得很奇怪。左/右箭头键,例如移动不正确,文本乱七八糟。

# read -r pid < <(ssh 10.10.10.46 'sleep 50 & echo $!') ; echo $pid
2135
# Killed by signal 2.
^C
#

我的脚本需要这个,所以我想知道为什么需要 CTRL-c 以及是否可以解决这个问题?

更新

看起来它打开了一个额外的 Bash shell,这就是需要退出的那个。

我真正感兴趣的命令是

read -r pid < <(ssh 10.10.10.46 "mbuffer -4 -v 0 -q -I 8023 > /tmp/mtest & echo $!"); echo $pid

最佳答案

试试这个:

read -r pid \
< <(ssh 10.10.10.46 'nohup mbuffer >/tmp/mtest </dev/null 2>/tmp/mtest.err & echo $!')

三个重要变化:

  • nohup 的使用(您也可以使用内置的 bash disown 获得类似的效果)
  • 将 stdin 和 stderr 重定向到文件(防止它们持有最终连接到您的终端的句柄)。
  • 对远程命令使用单引号(使用双引号,扩展发生在 ssh 开始之前,所以你得到的 $! 是最最近启动了本地后台进程)。

关于linux - Bash:使用 SSH 启动长时间运行的远程命令并收集其 PID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24490769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com