无法使用 Bash 重定向管道中的错误?

Trouble redirecting an error in pipeline using Bash?

ls -lhR /etc/ | egrep *.conf$ >/home/student/total_size.txt 2>/home/student/error.txt

所以我使用此命令从 /etc/ 获取所有 .conf 文件。我想要 total_size.txt 中的输出和 error.txt 中的错误。我的输出看起来不错,但错误不会重定向到 error.txt,它们出现在我的终端中:

ls: cannot open directory '/etc/cups/ssl': Permission denied

我不知道该怎么办;我试过 2>> 而不是 2> 但它也不起作用。

发生这种情况是因为 lsstderr 仍然指向终端。您需要将管道包裹在花括号中,并在外部进行重定向。例如:

{ ls -lhR /etc/ | egrep *.conf$; } >/home/student/total_size.txt 2>/home/student/error.txt

试试这个,应该可以解决问题。

ls -lhR /etc/ 2>>/home/student/error.txt | egrep *.conf$ >/home/student/total_size.txt

错误是由 ls 而非 egrep 产生的。