运行 在新后台 tmux 命令 window 并等待进程完成
Run command in new background tmux window and wait for process to finish
我正在尝试在脚本中使用 tmux,以便它在新的隐藏窗格中运行需要一些时间的命令(例如 'ping -c 5 8.8.8.8'),同时阻止当前脚本本身直到 ping 结束。
"hidden pane",我的意思是 运行 将在后台发送的新窗格中的命令,并且仍然可以通过切换窗格访问以监视 and/or 与其交互(不一定是 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 指出在创建新 window 时存在 -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]
你可以使用 wait-for
但你需要给它一个通道并在你的过程完成时向该通道发出信号,例如:
tmux neww -d 'ping blah; tmux wait -S ping'
tmux wait ping
echo done
如果您认为您可能 运行 脚本会并行运行几次,我建议使用 mktemp
或类似名称创建频道名称(并在 wait-for
[=22 时删除文件=]).
wait-for
无法自动等待诸如窗格或 windows 退出、窗格中的静音等内容,但我希望在某个时候看到它的实现。
我正在尝试在脚本中使用 tmux,以便它在新的隐藏窗格中运行需要一些时间的命令(例如 'ping -c 5 8.8.8.8'),同时阻止当前脚本本身直到 ping 结束。
"hidden pane",我的意思是 运行 将在后台发送的新窗格中的命令,并且仍然可以通过切换窗格访问以监视 and/or 与其交互(不一定是 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 指出在创建新 window 时存在 -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]
你可以使用 wait-for
但你需要给它一个通道并在你的过程完成时向该通道发出信号,例如:
tmux neww -d 'ping blah; tmux wait -S ping'
tmux wait ping
echo done
如果您认为您可能 运行 脚本会并行运行几次,我建议使用 mktemp
或类似名称创建频道名称(并在 wait-for
[=22 时删除文件=]).
wait-for
无法自动等待诸如窗格或 windows 退出、窗格中的静音等内容,但我希望在某个时候看到它的实现。