如何重定向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脚本中很有用 |