【发布时间】:2020-02-24 20:51:19
【问题描述】:
我正在尝试在脚本中使用 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 窗口?
-
基本上,我需要尽可能少的输出数据,命令有很多,也可以与之交互。所以不可能将标准输出重定向到一个文件并观看它,因为我无法与之交互。