如何重定向bash中的标准错误

时间:2020-01-09 10:39:34  来源:igfitidea点击:

我正在尝试将bash消息重定向到名为output.log的文件中。
但是,它没有被重定向。

如何在bash shell中重定向标准输出和标准错误?
在Linux中,如何重定向错误消息?
标准错误(也称为" stderr")是默认错误输出设备。
使用stderr编写所有系统错误消息。
数字二(2)表示标准错误。
默认的stderr是屏幕或监视器。
标准输出(也称为" stdout")由命令用来写入(显示)其输出。
默认的标准输出是屏幕。
用一个数字(1)表示。

2>是输入重定向符号,语法为:

  • 要将stderr(标准错误)重定向到文件:command 2> errors.txt
  • 要同时重定向stderr和stdout(标准输出):command&> output.txt

您必须将命令替换为要运行的命令。
让我们看一些示例,这些示例解释bash中标准错误的重定向。

如何重定向bash中的标准错误

运行find命令并保存所有错误消息到find.error.txt文件:

find / -name "*.conf" 2> find.error.txt

您可以使用cat命令查看find.error.txt:

cat find.error.txt

输出示例:

find: ‘/boot/grub2’: Permission denied
find: ‘/proc/tty/driver’: Permission denied
find: ‘/proc/1/task/1/fd’: Permission denied
find: ‘/proc/1/task/1/fdinfo’: Permission denied
...
..
find: ‘/proc/963/task/963/ns’: Permission denied
find: ‘/proc/963/task/1078/fd’: Permission denied
find: ‘/proc/963/task/1078/fdinfo’: Permission denied
....
..
find: ‘/var/spool/postfix/public’: Permission denied
find: ‘/var/spool/postfix/saved’: Permission denied
find: ‘/var/spool/postfix/trace’: Permission denied
find: ‘/usr/share/polkit-1/rules.d’: Permission denied
find: ‘/usr/libexec/initscripts/legacy-actions/auditd’: Permission denied

要将stderr重定向到文件时,需要使用2>。
您可以将stdout重定向到名为results.txt的文件,并将stderr重定向到名为errors.txt的文件:

find / -name "*.conf" >results.txt 2>error.txt

使用cat命令验证结果:

cat results.txt
cat error.txt

这在shell脚本或任何其他目的中很有用。

如何在bash中重定向标准错误和标准输出

您可以将stdout和stderr都发送到名为output.txt的文件

command &>output.xt
find / -name "*.pl" &>filelist.txt

请注意,find命令的错误和实际输出都存储在文件中:

cat filelist.txt

输出示例:

/usr/bin/rsyslog-recover-qi.pl
/usr/lib/grub/i386-pc/gmodule.pl
/usr/lib/firmware/dsp56k/concat-bootstrap.pl
/usr/share/doc/GeoIP-1.5.0/fetch-geoipdata-city.pl
/usr/share/doc/GeoIP-1.5.0/fetch-geoipdata.pl
/usr/share/doc/postfix-2.10.1/examples/smtpd-policy/greylist.pl
find: ‘/usr/share/polkit-1/rules.d’: Permission denied
find: ‘/usr/libexec/initscripts/legacy-actions/auditd’: Permission denied

总结

命令描述/目的
命令2> filename将stderr重定向到filename
命令>output 2>文件名将stderr重定向到名为filename的文件,并将stdout重定向到名为output的文件
command&> filename将stderr和stdout重定向到filename
命令2>&-仅抑制错误消息。未创建文件。屏幕上没有显示错误消息
命令2>&1
die(){
echo "$1" 2>&1
}
die "File not found"
将错误消息重定向到标准输出。需要在屏幕上强制显示错误消息时,在shell脚本中很有用