在Bash脚本中隐藏输出

Val*_*lov 0 linux bash shell

我有一个bash脚本,但它给了我恼人的输出,我不想看到.当然我可以用这种方式隐藏它:

./script.sh >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

但是我想把脚本放在"rc.local"或"c​​ron job"中,所以如果它每隔5分钟接收一次输出,或者在启动时就会非常糟糕.如果有一种方法可以告诉整个脚本隐藏输出,那将会很棒.

Cha*_*ffy 5

如果您想重定向所有输出到/dev/null 的脚本,可以像这样做(在这种情况下,仅执行如果环境变量重定向DEBUG未设置):

#!/bin/bash
[[ $DEBUG ]] || exec >/dev/null 2>&1
# ...continue with execution here.
Run Code Online (Sandbox Code Playgroud)

您还可以检查输入是否来自TTY以检测交互式使用:

if [ -t 0 ]; then
  # being run by a human, be extra verbose
  PS4=':$LINENO+'
  set -x
else
  # being run by a daemon, be outright silent
  exec >/dev/null 2>&1
fi
Run Code Online (Sandbox Code Playgroud)

查看内置的bash-hackers页面exec.