playerctl状态判断失效:匹配"Paused"时无法进入if分支
问题分析与解决
你的脚本始终无法进入if分支,主要是这几个原因导致的,对应修正方法如下:
1. 正则匹配的引号使用错误
在bash的[[ =~ ]]正则匹配语法里,给匹配字符串加双引号会让bash把整个带引号的内容当作字面量处理——也就是你现在的代码是在找输出里有没有"Paused"(包含双引号),但playerctl返回的是不带引号的Paused,自然永远匹配不上。
把匹配条件改成不带引号的形式:
if [[ $output =~ Paused ]];
2. 输出可能包含多余空白字符
有时候playerctl的输出会附带换行、空格或制表符,这些隐形字符会干扰匹配。可以在获取输出时用xargs过滤掉多余空白:
output=$(playerctl status -p spotify | xargs)
修正后的完整脚本
output=$(playerctl status -p spotify | xargs) echo $output if [[ $output =~ Paused ]]; then polybar-msg hook spotify-play-pause 1 # else polybar-msg hook spotify-play-pause 2 # fi playerctl play-pause -p spotify
另外,你可以手动执行playerctl status -p spotify确认返回的状态是Paused还是小写的paused,如果是小写,就把匹配条件改成paused即可。
内容的提问来源于stack exchange,提问作者Caleb Renfroe
相关产品推荐
相关产品推荐

