重定向 STDOUT 和 STDERR
像 0 和 1 这样的文件描述符是指针。我们通过重定向更改文件描述符指向的内容。>/dev/null 表示 1 指向/dev/null。
首先,我们将 1(STDOUT)指向/dev/null,然后将 2(STDERR)指向 1 点。
# STDERR is redirect to STDOUT: redirected to /dev/null,
# effectually redirecting both STDERR and STDOUT to /dev/null
echo 'hello' > /dev/null 2>&1
Version >= 4
这可以进一步缩短到以下几点:
echo 'hello' &> /dev/null
但是,如果 shell 兼容性是一个问题,因为它与 POSIX 冲突,引入解析模糊性,没有此功能的 shell 会误解它,这种形式在生产中可能是不合需要的:
# Actual code
echo 'hello' &> /dev/null
echo 'hello' &> /dev/null 'goodbye'
# Desired behavior
echo 'hello' > /dev/null 2>&1
echo 'hello' 'goodbye' > /dev/null 2>&1
# Actual behavior
echo 'hello' &
echo 'hello' & goodbye > /dev/null
注意:已知 &> 在 Bash 和 Zsh 中都可以正常工作。