自动将输出重定向到/dev/null

自动将输出重定向到/dev/null

我有一个带有大量输出的简单脚本:

#!/bin/bash
{
apt-get update && apt-get upgrade
} 2>&1

./script.sh >/dev/null 2>&1以使其静音开始。

我可以从内部使脚本静音吗?

答案1

您可以在脚本中添加重定向:

--编辑--杰夫·夏勒评论后

#!/bin/bash
# case 1: if you want to hide all message even errors
{
apt-get update && apt-get upgrade
} > /dev/null 2>&1


#!/bin/bash
# case 2: if you want to hide all messages but errors
{
apt-get update && apt-get upgrade
} > /dev/null 

答案2

这就是bash内置命令exec的用途(尽管它也可以执行其他操作)。

摘自man bashCentOS 6.6 盒子:

   exec [-cl] [-a name] [command [arguments]]
          ...
          If command is not specified, any redirections take effect in the
          current shell, and the return status is 0.  If there is a 
          redirection error, the return status is 1.

所以你要找的是exec >/dev/null 2>&1.您可以使用包装器仅在传递选项getopts时使脚本静音:-q

#!/bin/bash

getopts :q opt
case $opt in
  q)
    exec >/dev/null 2>&1
    ;;
esac
shift "$((OPTIND-1))"

你不需要包装纸getopts,但它可能会很好。不管怎样,这比将整个脚本放在花括号中要干净得多。您还可以使用exec将输出附加到日志文件:

exec 2>>/var/myscript_errors.log
exec >>/var/myscript_output.log

你明白了。非常方便的工具。

相关内容