Bash stderr重定向在某些情况下不起作用

时间:2019-01-06 05:50:46

标签: bash redirect tree stderr ls

我有两种情况可以分享,我没有发现stderr重定向(2>)可以正常工作:

在两种情况下,正在执行操作的文件/目录都不存在。

案例1

在管道中输入2条命令时:

[root@example ~]# cat test2.txt | grep -i 'third'
cat: test2.txt: No such file or directory

[root@example ~]# cat test2.txt | grep -i 'third' 2> /dev/null
cat: test2.txt: No such file or directory

但是重定向仅与grep一起用作命令即可:

[root@example ~]# grep -i 'third' test2.txt 
grep: test2.txt: No such file or directory

[root@example ~]# grep -i 'third' test2.txt 2> /dev/null
<redirection worked properly>

我知道先使用cat再使用grep并没有任何意义,但我只是对此感到好奇。

案例2

使用tree命令时:

[root@example ~]# tree /var/crash2
/var/crash2 [error opening dir]

0 directories, 0 files

[root@example ~]# tree /var/crash2 2> /dev/null
/var/crash2 [error opening dir]

0 directories, 0 files

但是ls命令不是这种情况:

[root@example ~]# ls -ld /var/crash2
ls: cannot access /var/crash2: No such file or directory

[root@example ~]# ls -ld /var/crash2 2> /dev/null
<redirection worked properly>

这里出问题了吗?

1 个答案:

答案 0 :(得分:0)

  1. cat的错误不是Cyrus提到的grep

  2. tree命令在标准输出中显示“错误打开目录”

因此,该命令显示了是否使用2> / dev / null

root@ubuntu:~# tree -if test 2>/dev/null
test [error opening dir]

0 directories, 0 files

您之前提到的同一件事曾被报告为错误,请参见:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=76594