【发布时间】:2016-02-11 10:41:59
【问题描述】:
编者注:这个问题经过多次修改,改变了问题的性质,可能会使旧的 cmets 和答案无效;它的原始标题是“无法将 Bash 输出重定向到 /dev/null”。
我正在尝试创建一个小型 Bash 脚本,我想为其实现静默模式。基本上我只想默认隐藏大部分输出,如果我使用-v 运行它,则显示所有输出。
所以在我的脚本开头我放了:
#!/bin/bash
declare output=''
if [ "$1" = -v ]; then
output="&1"
else
output="/dev/null"
fi
然后在我的脚本中:
{
# whatever commands...
} > $output 2>&1
静音模式运行良好。但是,如果我尝试详细模式,则会创建一个名为 & 或 &1 的文件(基于我的 output 变量)。此外,该文件是空的。这不是预期的结果:我希望输出留在终端上!
这是由于我重定向的顺序还是我的变量错误?编辑:脚本现在可以完全正常工作了,将"&1" 替换为"/dev/tty" 作为输出值。
【问题讨论】:
-
在此处发布之前尝试shellcheck.net。提名关闭为简单的错字。
-
感谢您的链接!但是,即使在修正了错字之后,也存在一个问题:详细模式是打开还是关闭,输出总是一样的。
-
@Lupuss 也重定向标准错误
-
您可以使用
exec > /dev/null 2>&1永久重定向stdout 和stderr。