在新的后台tmux窗口中运行命令,等待过程完成

问题描述 投票:2回答:1

我正在尝试在脚本中使用tmux,以便它在隐藏当前脚本的同时运行一个命令,该命令在新的隐藏窗格中会花费一些时间(例如'ping -c 5 8.8.8.8')直到ping结束。

通过“隐藏窗格”,我的意思是在新窗格中运行命令,该命令将在后台发送,并且仍可通过切换窗格进行访问以监视和/或与其交互(不一定是ping)。] >(请参见编辑)

这里有一些伪bash代码,可以更清楚地显示我要执行的操作:

echo "Waiting for ping to finish..."
echo "Ctrl-b + p to switch pane and see running process"

tmux new-window -d 'ping -c 5 8.8.8.8' # run command in new "background" window
tmux wait-for                          # display "Done!" only when ping command has finished

echo "Done!"

我知道这里的tmux命令实际上没有任何意义,但这只是为了说明。

我已经查看了不同的解决方案,以便在后台发送命令,或者等到进程在另一个窗格中完成后,但是我仍然没有找到正确执行这两种方法的方法。

编辑

感谢Nicholas Marriott指出,在创建新窗口时会出现-d选项,以避免自动切换到该窗口。现在唯一的问题是阻塞主脚本,直到命令结束。

我尝试了以下操作,希望它能起作用,但是两者都不起作用(脚本不会继续)。

tmux new-window -d 'ping -c 5 8.8.8.8; tmux wait -S ping' &
tmux wait $!

也许有一种方法可以处理流程(使用fgbg ...,但是我仍然没有弄清楚。

类似的问题:[1]Make tmux block until programs complete[2]Bash - executing blocking scripts in tmux[3]How do you hide a tmux pane[4] how to wait for first command to finish?

我正在尝试在脚本中使用tmux,以便它在隐藏当前脚本的同时运行一个命令,该命令在新的隐藏窗格中会花费一些时间(例如'ping -c 5 8.8.8.8')直到...

bash tmux
1个回答
0
投票

您可以使用wait-for,但需要在处理完成后给它提供一个通道并向该通道发出信号,例如:

© www.soinside.com 2019 - 2024. All rights reserved.