我想根据终端的背景颜色有条件地进行操作,发现运行时可以掌握它的颜色。
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 '\e]11;?\a')
$ printf "%q\n" "$v"
$'\E]11;?\a'
变量v与第一个printf的输出相同($'...'是%q
引用字符串的格式的结果)。
您需要使用shell的read
命令来捕获来自终端的答复。例如,使用bash:
$ read -n 24 -p "$v" reply
$ printf "%q\n" "$reply"
$'\E]11;rgb:ffff/ffff/ffff\a'
在这里-p
用于打印变量$v
,并且该变量reply
从终端响应中读取24个字符。最后的printf显示reply
包含您期望的字符串。因此,您可以与它进行比较:
[ "$reply" = $'\e]11;rgb:ffff/ffff/ffff\a' ]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句