监视 tmux 中的退出代码

监视 tmux 中的退出代码

有没有办法根据命令退出状态更新 tmux 窗口属性?与活动监控类似,我希望标题在命令退出时改变颜色,例如,绿色表示成功,红色表示失败。我已经使用 PROMPT_COMMAND (​​位于 ~/.bashrc 中)一起破解了一些东西,但并不完全令人满意。它与活动监控配合得不好(即除非禁用活动监控,否则看不到红色/绿色)并且颜色变化很粘;它会在您访问窗口后保持状态,而不是像其他 tmux 监控那样返回默认值。

function set_color_from_return_code {
  local bg_color=$([ $? == 0 ] && echo "green" || echo "red")
  tmux set-window-option -t${TMUX_PANE} window-status-bg $bg_color # &> /dev/null
}
PROMPT_COMMAND="set_color_from_return_code"

编辑:具体来说,我使用 tmux 作为 byobu 的后端,所以我添加了 byobu 标签,因为特定于 byobu 的解决方案对我来说很好。

答案1

  1. 在您的主目录中,创建一个文件.exit-monitor.sh,然后执行chmod +x .exit-monitor.sh.给它写下这个:
#!/bin/bash

if (( $1 == 0 )); then
    tmux set-window-option status-left "#[fg=colour0]#[bg=colour2]$1"
else
    tmux set-window-option status-left "#[fg=colour0]#[bg=colour1]$1"
fi
  1. 在您的 中.bashrc,添加以下内容:
if echo "$PROMPT_COMMAND" | /bin/grep "exit-monitor" &>/dev/null; then
    export PROMPT_COMMAND=${PROMPT_COMMAND/~\/.exit-monitor.sh \$?;/}
fi

if ps -aux | grep tmux | grep -v grep &>/dev/null; then
    export PROMPT_COMMAND="~/.exit-monitor.sh \$?; $PROMPT_COMMAND"
fi

如果脚本已经存在,这将从 PROMPT_COMMAND 中删除脚本,并将其重新添加到变量的开头,但前提是 tmux 正在运行。否则,您将不断将脚本添加到 PROMPT_COMMAND 中,并且如果 tmux 未运行,您将收到烦人的错误消息。

现在,tmux 状态栏左上角的一个小方块将显示绿色或红色以及退出状态编号。如果需要,您还可以添加文本,例如使用 FAIL/SUCCESS

tmux set-window-option status-left "#[fg=colour0]#[bg=colour1]FAIL"

或类似的。当然你也可以改变位置,例如使用status-right。一个重要的注意事项是,它.exit-monitor.sh必须是第一个条目PROMPT_COMMAND才能工作,如果您有任何其他工具写入状态文本,这些工具必须能够附加其状态而不是替换它。

顺便说一句,非常有趣的想法,我从来没有想到过这一点,但肯定会将其保留在我的设置中。

相关内容