Tmux 等待分离吗?

Tmux 等待分离吗?

我正在寻找一种方法来等待执行,然后通过 bash 命令行与当前 tmux 会话分离。

例如,目前我正在尝试构建一个部署自动化命令行工具。它应该能做到:

  • 创建一个新的 tmux 会话,并附加到它,
  • 运行一个文件(例如 build)向用户显示它的标准输出,
  • 当执行结束时脱离会话,
  • 并且捕获窗格判断 stdout 是否以成功或错误的方式完成,然后如果成功则继续下一个文件(例如启动)并向用户显示其 stdout 创建并附加到新的 tmux 会话,依此类推。

我尝试了以下操作,但是没有成功,因为它不等待前面的命令,而是立即分离。(注意:假设 build.sh 需要数十秒才能通过其标准输出执行)

tmux a -t tmp \; \
    set-buffer ". /root/pg/myapp/production/.deploy/remote/build.sh;" \; paste-buffer \; send-keys C-m \; \
    set-buffer "tmux wait-for -S done;" \; paste-buffer \; send-keys C-m \; \
    set-buffer "tmux wait-for done;" \; paste-buffer \; send-keys C-m \; \
    detach \; 
tmux a -t tmp \; \
    set-buffer ". /root/pg/myapp/production/.deploy/remote/build.sh;" \; paste-buffer \; send-keys C-m \; \
    send-keys C-b \; \
    send-keys d \; 

版本:

# tmux -V
tmux 3.0a

# bash --version
GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)

谢谢。

答案1

通过以下方式解决了该问题:

tmux a -t tmp \; \
            set-buffer "sleep 1;" \; paste-buffer \; send-keys C-m \; \
            set-buffer "tmux detach;" \; paste-buffer \; send-keys C-m \;

只需使用tmux detachbash 命令而不是detachtmux 命令。

相关内容