You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Linux下playerctl脚本输出异常问题排查

问题分析与解决

你的脚本出现该问题有两个核心原因:

  1. 前两次调用playerctl status时未重定向错误输出,当无播放器运行时,playerctl会直接向终端的stderr打印No players found——这不是脚本里echo的输出,而是程序本身的错误信息。
  2. 第三个判断逻辑错误:playerctl status 2>/dev/null会丢弃错误输出,此时程序的stdout为空字符串,拿空值和No players found比较永远不成立,导致走到else分支。

修复后的脚本

#!/bin/bash

# 一次性获取playerctl的状态,合并stderr到stdout以便捕获错误信息
player_status=$(playerctl status 2>&1)

if [ "$player_status" = "Playing" ]; then
    echo " play "
elif [ "$player_status" = "Paused" ]; then
    echo " pause "
elif [ "$player_status" = "No players found" ]; then
    echo " not found "
else
    echo "other"
fi

关键优化点

  • 合并错误输出:用2>&1把playerctl的stderr输出合并到stdout,无播放器时的错误提示会被捕获到变量中,而非直接打印到终端。
  • 减少重复调用:只执行一次playerctl status,避免多次调用可能带来的状态不一致问题,同时提升脚本效率。
  • 规范字符串比较:使用bash标准的=进行字符串比较,并用双引号包裹变量,防止空值或含空格的字符串导致判断逻辑异常。
  • 移除冗余操作:原脚本里echo -n $(playerctl status)属于冗余操作,$(...)本身会自动去除输出末尾的换行符,无需额外处理。

内容的提问来源于stack exchange,提问作者Devalla Bharath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:16:09