使用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'
问题原因
- 单引号的变量解析问题:你用单引号包裹了
--menu的内容,shell里单引号会把所有内容当作纯字符串,不会解析$pid这个变量,所以yad执行kill命令时,拿到的就是字面意义的$pid,而不是VLC的实际进程ID,自然报错。 - 代码顺序问题:你先启动了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
相关产品推荐
相关产品推荐

