终端启动时自动执行静音脚本的实现问题求助
终端启动时自动执行静音脚本的实现问题求助
我有一个用来静音的命令:
pactl set-sink-mute 0 true
直接在终端里运行这个命令是有效的,但把它放进.sh脚本或者通过crontab定时执行(比如* * * * * pactl set-sink-mute 0 true)时就会报错。
请问有没有办法实现:当我打开终端时,脚本自动在终端里输入这个命令并执行?或者有没有其他办法让这个命令能通过脚本或crontab正常运行?此致,
Adrian
问题原因先说明下
为啥crontab和普通脚本跑会失败?其实是因为crontab运行时的环境变量和你登录终端后的完全不一样,它没加载用户音频会话相关的变量(比如PULSE_SERVER),而pactl得靠这些变量才能找到你的音频设备。
方案一:终端启动时自动执行静音命令
如果你只是想打开终端就自动静音,最简单的办法是把命令加到终端的配置文件里:
- 用Bash终端的话,编辑
~/.bashrc文件,在末尾加一行:pactl set-sink-mute 0 true - 用Zsh的话就编辑
~/.zshrc,同样加上面那行命令。
下次打开终端时,这个命令会自动执行,没必要搞“自动输入再回车”那套,直接后台跑就完事了。
要是你非得要“自动输入命令再回车”的效果(其实真的没必要,但满足你的需求),可以在配置文件里加这段:
echo "pactl set-sink-mute 0 true" >> /tmp/temp_mute_cmd.sh bash /tmp/temp_mute_cmd.sh rm /tmp/temp_mute_cmd.sh
方案二:修复脚本/crontab的执行问题
如果想让命令在脚本或crontab里正常运行,得手动指定音频相关的环境变量:
脚本方式:
写一个mute.sh脚本,内容如下:#!/bin/bash # 加载用户的环境变量 source $HOME/.profile # 执行静音命令 pactl set-sink-mute 0 true然后给脚本加执行权限:
chmod +x mute.sh,之后运行./mute.sh就正常了。crontab方式:
编辑crontab(输入crontab -e),把原来的命令改成:* * * * * export DISPLAY=:0 && export PULSE_SERVER=unix:/run/user/$(id -u)/pulse/native && pactl set-sink-mute 0 true这里指定了
DISPLAY和PULSE_SERVER两个关键变量,$(id -u)会自动获取当前用户的UID,适配不同用户的环境。
备注:内容来源于stack exchange,提问作者adrian
相关产品推荐
相关产品推荐

