重定向 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 中都可以正常工作。