我尝试了各种方法来重定向 和stdout
,stderr
但/dev/null
没有成功。我几乎一生都在运行 bash,但从来没有遇到过这个问题,但在 BSD 中我却被困住了/bin/sh
。
我尝试过的:
if ls ./python* 2> /dev/null; then
echo found Python
fi
...有效;如果 Python 不存在,它将静音来自 ls 的错误消息。但是,如果python.tgz
存在,则会输出一行,如下所示:
# ./test.sh
./python-2.7.3p1.tgz
我试过了:
if ls ./python* &> /dev/null; then
echo found Python
fi
和
if ls ./python* 2>1 > /dev/null; then
echo found Python
fi
和
if ls ./python* > /dev/null; then
echo found Python
fi
没有什么真正有效。我只能重定向其中一个输出,而不能同时重定向两个输出。
答案1
这适用于任何 POSIX 兼容的 shell:
ls good bad >/dev/null 2>&1
你必须重定向标准输出第一的在将其复制到 stderr 之前;如果你先复制它,stderr 将只指向 stdout 最初指向的内容。
重击、zsh 和其他一些 shell 也提供了快捷方式
ls good bad &>/dev/null
这在命令行上很方便,但在可移植的脚本中应避免使用。