我的 Mac 上有一个脚本,可以显示电池电量并输出一些颜色。颜色基于电池电量。当电量降至零时,颜色从绿色变为红色:
#!/bin/bash
percent=`ioreg -l | grep -i capacity | tr '\n' ' | ' | awk '{printf("%d", $10/$5 * 100)}'`
if [ $percent -gt 80 ] ; then
echo -n $'\e[32m'"${percent}%"
elif [ $percent -gt 65 ] ; then
echo -n $'\e[1;33m'"${precent}%"
elif [ $percent -gt 40 ] ; then
echo -n $'\e[1;31m'"${percent}%"
else
echo -n $'\e[31m'"${percent}%"
fi
我已将其放入我的 tmux 配置中:
# status right options
set -g status-right '#[fg=green][#[fg=blue]%Y-%m-%d #[fg=white]%H:%M#[default] #($HOME/bin/battery)#[fg=green]]'
但是,它在我的终端上显示为:
我的问题是,如何让 tmux 正确显示转义字符?
答案1
这似乎没有记录† ,但、、和中的#()
shell 命令输出也会被处理为颜色/属性序列。status-left
status-right
window-status-format
window-status-current-format
#[]
因此,只需输出#[]
序列而不是转义序列。
#!/bin/bash
percent=$(ioreg …)
if (( percent > 80 )); then color='#[nobright fg=green]'
elif (( percent > 65 )); then color='#[bright fg=yellow]'
elif (( percent > 40 )); then color='#[bright red]'
else color='#[nobright red]'
fi
echo "$color$percent%"
不为这些状态字符串解释完整的转义序列是有道理的:执行(例如)光标控制没有多大意义,因为它们总是被渲染成单行(的一部分)。
†我浏览了源代码,发现严格在所有其他序列(包括)#[]
之后进行解释。 自从引入以来,似乎一直都是这种情况。#
#()
#[]