Bash 重定向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
这可以进一步简化为如下:
echo 'hello' &> /dev/null
但是,如果要考虑外壳兼容性,则这种形式在生产中可能是不可取的,因为它与POSIX冲突,引入了解析歧义,并且没有此功能的外壳会误解它:
# 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中都能按需工作。