我有一个带有大量输出的简单脚本:
#!/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 bash
CentOS 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
你明白了。非常方便的工具。