Linux 使用Bash重定向管道中的错误时出现问题?
所以我使用这个命令从Linux 使用Bash重定向管道中的错误时出现问题?,linux,bash,ls,Linux,Bash,Ls,所以我使用这个命令从/etc/获取所有.conf文件。我希望输出为total_size.txt,我的错误为error.txt。我的输出看起来不错,但错误不会重定向到error.txt,它们出现在我的终端中: ls -lhR /etc/ | egrep *.conf$ >/home/student/total_size.txt 2>/home/student/error.txt 我不知道该怎么办;我尝试了2>而不是2>,但它也不起作用。发生这种情况是因为ls的stderr仍然指向终端
/etc/
获取所有.conf文件。我希望输出为total_size.txt
,我的错误为error.txt
。我的输出看起来不错,但错误不会重定向到error.txt
,它们出现在我的终端中:
ls -lhR /etc/ | egrep *.conf$ >/home/student/total_size.txt 2>/home/student/error.txt
我不知道该怎么办;我尝试了
2>
而不是2>
,但它也不起作用。发生这种情况是因为ls
的stderr仍然指向终端。您需要用大括号将管道包裹起来,并在外部执行重定向。例如:
ls: cannot open directory '/etc/cups/ssl': Permission denied
试试这个,应该可以
{ ls -lhR /etc/ | egrep *.conf$; } >/home/student/total_size.txt 2>/home/student/error.txt
错误是由
ls
产生的,而不是egrep
egrep的stderr仍然连接到终端。如果失败了怎么办?您应该能够再次为egrep重定向stderr。egrep*.conf$1>/home/student/total_size.txt 2>/home/student/error.txt由于ls的stdout被egrep使用,因此输出重定向也可以放在大括号之外。相关的,grep-E
比egrep
更便于移植。另见。
ls -lhR /etc/ 2>>/home/student/error.txt | egrep *.conf$ >/home/student/total_size.txt