如何根据命令执行结果设置tmux状态栏样式?
如何根据命令执行结果设置tmux状态栏样式?
这个需求太实用了!我之前也遇到过类似的情况,凭证过期了半天都没发现,耽误事得很。咱们一步步来解决这个问题:
第一步:写个凭证状态判断脚本
tmux的条件判断#{?...}语法可以基于外部命令的返回值来分支,所以我们先写个小脚本,帮我们判断凭证是否需要提醒:
创建一个叫check_creds.sh的脚本,内容如下:
#!/bin/bash # 获取凭证剩余时间的输出 creds_output=$(credentials_remaining) # 如果输出为空,直接判定为需要提醒(没凭证) if [ -z "$creds_output" ]; then exit 0 fi # 把剩余时间转换成总分钟数,方便判断 # 提取小时部分,比如从"7h30m"里拿7 hours=$(echo "$creds_output" | sed -n 's/^\([0-9]*\)h.*/\1/p') # 提取分钟部分,比如从"7h30m"里拿30 minutes=$(echo "$creds_output" | sed -n 's/.*\([0-9]*\)m/\1/p') # 处理只有小时或者只有分钟的情况 hours=${hours:-0} minutes=${minutes:-0} total_minutes=$((hours * 60 + minutes)) # 如果剩余时间小于等于4小时(240分钟),返回0(触发提醒样式) if [ "$total_minutes" -le 240 ]; then exit 0 else exit 1 fi
保存后给脚本加执行权限:
chmod +x check_creds.sh
最好把它放到你的用户可执行目录里,比如~/.local/bin/,这样tmux能轻松找到它:
mv check_creds.sh ~/.local/bin/
第二步:配置tmux使用这个脚本
现在我们可以在tmux配置(一般是~/.tmux.conf)里用这个脚本的返回值来切换样式了。
方案1:只给凭证部分加红色背景
如果只想让凭证显示区域变色,用这个配置:
set-option -ga status-right '#{?#(check_creds.sh),#[bg=#ff0000 fg=#ffffff],#[bg=#44475a fg=#f8f8f2]} Creds: #(credentials_remaining)#[default] '
解释一下:
#{?#(check_creds.sh),A,B}:如果check_creds.sh返回0(需要提醒),就用A分支的样式,否则用B分支#[bg=#ff0000 fg=#ffffff]:红色背景+白色文字,醒目度拉满!#[default]:恢复默认样式,避免影响状态栏后面的其他内容
方案2:整个状态栏背景变红
如果想让整个状态栏都提醒你,就修改状态栏的全局样式:
set-option -g status-style '#{?#(check_creds.sh),bg=#ff0000 fg=#ffffff,bg=#44475a fg=#f8f8f2}' # 然后正常设置状态栏右侧内容 set-option -ga status-right 'Creds: #(credentials_remaining) '
第三步:测试生效
保存tmux配置后,在tmux里执行tmux source ~/.tmux.conf让配置生效。你可以手动模拟凭证过期的情况(比如临时修改check_creds.sh里的阈值为一个很大的数,或者直接让credentials_remaining返回空),看看状态栏会不会变成红色。
一些小细节
- 如果你的
credentials_remaining输出格式和7h30m不一样(比如只有30m或者2h),脚本里的sed命令已经做了兼容,不用太担心;如果格式差别很大,只要调整sed的正则匹配就行。 - 要是觉得4小时的阈值不合适,直接改脚本里的
240为你想要的分钟数就行,比如改成60就是剩余1小时提醒。
备注:内容来源于stack exchange,提问作者izidor
相关产品推荐
相关产品推荐

