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

使用yad系统托盘通知终止应用(以VLC为例)的报错求助

使用yad系统托盘通知终止应用(以VLC为例)的报错求助

我明白你想用yad的系统托盘通知来快速终止VLC这类应用,不过你的代码里有两个小问题导致了这个报错:

先看你写的代码:

yad --notification --no-middle --image=emblem-warning --menu='Cancel ! kill $pid' --text="My Tooltip" &

vlc & pid=${!}

运行后出现错误:

kill: failed to parse argument: '$pid'

问题原因

  1. 单引号的变量解析问题:你用单引号包裹了--menu的内容,shell里单引号会把所有内容当作纯字符串,不会解析$pid这个变量,所以yad执行kill命令时,拿到的就是字面意义的$pid,而不是VLC的实际进程ID,自然报错。
  2. 代码顺序问题:你先启动了yad,再启动VLC赋值$pid,这时候yad启动时$pid还没有值,就算改成双引号,拿到的也是空值,同样会出错。

修正后的代码

把顺序反过来,先启动VLC获取pid,再用双引号包裹菜单内容让shell解析变量:

# 先启动VLC并捕获它的进程ID
vlc & pid=${!}
# 再启动yad托盘通知,双引号让$pid被正确解析
yad --notification --no-middle --image=emblem-warning --menu="Cancel ! kill $pid" --text="My Tooltip" &

额外优化(可选)

如果希望VLC退出后,yad托盘也自动消失,可以加一段等待进程结束的逻辑:

vlc & pid=${!}
# 启动yad并记录它的进程ID
yad --notification --no-middle --image=emblem-warning --menu="Cancel ! kill $pid" --text="My Tooltip" & yad_pid=${!}
# 等待VLC进程结束后,杀掉yad进程
wait $pid
kill $yad_pid

这样就能完美实现你想要的功能啦~

备注:内容来源于stack exchange,提问作者Mahmoud Alnaanah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:49:11