击:使用SSH开始一个长期运行的远程命令,并收集其PID(Bash: Using SSH to st

2019-10-20 09:18发布

当我这样做的话,我必须按CTRL-c之后或壳行为怪异。 左/右箭头键如不正确地移动和文本搞砸。

# 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

Answer 1:

试试这个:

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

三个重要的变化:

  • 使用nohup (你也可以得到与内置的bash类似的效果disown
  • 标准输入和标准错误输出到文件重定向(防止他们拿着连接,最终到终端的手柄)。
  • 单引号远程命令的使用(用双引号,扩建前发生ssh开始,所以$!你得到的是最近启动的本地后台进程的PID)。


文章来源: Bash: Using SSH to start a long-running remote command and collect its PID
标签: linux bash ssh pid