后台运行Shell脚本后无法屏蔽无用提示信息,该如何解决?
解决后台运行Shell脚本仍弹出警告提示的问题
嘿,我懂你这种被无用警告弹窗打断的烦躁——明明把脚本扔后台跑了,结果屏幕还是被各种提示占着,之前的尝试还都没用。咱们来一步步搞定这个问题:
先搞懂核心问题:你可能没正确重定向所有输出
后台运行脚本时,默认情况下**标准输出(stdout)和标准错误输出(stderr)**还是会关联到当前终端。很多警告提示其实是从stderr输出的,如果你只重定向了stdout,那这些信息自然还会冒出来。
最常用的完全静默方案
试试这个命令,一次性把所有输出都丢去“黑洞”(/dev/null),同时后台运行:
./your_script.sh > /dev/null 2>&1 &
> /dev/null:把脚本的标准输出(正常日志、打印内容)导向空设备2>&1:把标准错误输出(警告、错误提示)重定向到和标准输出一样的地方(也就是/dev/null)&:让脚本在后台运行
bash里还有个更简洁的写法,效果完全一样:
./your_script.sh &>/dev/null &
如果上面的方法还不管用?试试nohup
有些脚本会和终端保持强关联,这时候用nohup(no hang up,意思是断开终端后脚本也能继续跑)能彻底切断它和当前屏幕的联系:
nohup ./your_script.sh > /dev/null 2>&1 &
默认情况下nohup会把输出写到nohup.out文件里,咱们这里直接重定向到/dev/null,就完全看不到任何输出了。
特殊情况:如果是桌面图形弹窗?
要是你的脚本里调用了图形工具(比如zenity、notify-send这类弹出提示框的命令),那上面的重定向就没用了——因为这些程序直接和桌面环境交互,不走stdout/stderr。这时候可以在运行脚本时禁用图形显示:
DISPLAY= ./your_script.sh > /dev/null 2>&1 &
DISPLAY= 清空了图形显示的环境变量,图形程序就没法弹出窗口了。
最后检查:别犯重定向顺序的错误
很多人会写错命令顺序,比如:
./your_script.sh & > /dev/null
这其实是把当前shell的输出重定向了,而不是脚本的!一定要把重定向写在&前面,这样才会作用于脚本进程。
内容的提问来源于stack exchange,提问作者Mehdi
相关产品推荐
相关产品推荐

