我正在尝试在脚本中使用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 $!
也许有一种方法可以处理流程(使用
fg
,bg
...,但是我仍然没有弄清楚。
类似的问题:[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')直到...
您可以使用wait-for
,但需要在处理完成后给它提供一个通道并向该通道发出信号,例如: