我想根据终端的背景颜色有条件地做一件事,我发现可以通过运行来掌握
printf '\e]11;?\a'
在我的例子中,输出是
stanton@mybox:~$ printf '\e]11;?\a'
^[]11;rgb:ffff/ffff/ffff^Gstanton@mybox:~$ 11;rgb:ffff/ffff/ffff
这已经令人困惑了。无论如何,我想过像这样进行测试
[ "$(printf '\e]11;?\a')" = "^[]11;rgb:ffff/ffff/ffff^G" ] && echo it\'s light || echo it\'s dark
但它不起作用。(我已经尝试了我想到的任何可能的字符串变体,有或没有转义序列等,但没有结果。)
我需要做什么来比较 printf 和字符串的输出?
问题是您不想要 的输出
printf
,而是来自终端的回复。你$(...)
不评价这个回复,正如我们所看到的:变量 v 与第一个 printf 的输出相同($'...' 是
%q
引用字符串的格式的结果)。您需要使用 shell 的
read
命令来捕获来自终端的回复。例如,使用 bash:这里
-p
用来打印变量$v
,变量reply
从终端响应中读取24个字符。最终的 printf 显示reply
包含您期望的字符串。所以你可以与之比较: