有没有办法根据命令退出状态更新 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
- 在您的主目录中,创建一个文件
.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
- 在您的 中
.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
才能工作,如果您有任何其他工具写入状态文本,这些工具必须能够附加其状态而不是替换它。
顺便说一句,非常有趣的想法,我从来没有想到过这一点,但肯定会将其保留在我的设置中。