如何在bash中的一行上执行双重重定向?

如何在bash中的一行上执行双重重定向?,bash,redirect,Bash,Redirect,我想运行du,将stdout重定向到一个文件,将stderr重定向到另一个文件 我有一句话: du -ah / | sort -h >/home/username/stdout.txt 2>/home/username/stderr.txt 我知道这总是会产生错误,因为/proc/中的东西并不像du希望的那样有形——这很好。这一行将用我想要看到的一切填充stdout.txt,但是stderr仍然会溢出到控制台中,并且stderr.txt文件仍然是空的。有没有一种方法可以像这

我想运行du,将stdout重定向到一个文件,将stderr重定向到另一个文件

我有一句话:

    du -ah / | sort -h >/home/username/stdout.txt 2>/home/username/stderr.txt

我知道这总是会产生错误,因为/proc/中的东西并不像du希望的那样有形——这很好。这一行将用我想要看到的一切填充stdout.txt,但是stderr仍然会溢出到控制台中,并且stderr.txt文件仍然是空的。有没有一种方法可以像这样交错重定向,或者我必须运行该行两次,每行都有自己的重定向?

您捕获的错误流是由
sort
发出的,而不是由
du
(在stderr上没有重定向)发出的,这说明您的文件是空的

您希望对stdout的输出进行排序,并捕获stderr中
du
命令的错误(未排序)。例如,这样做:

du -ah / 2>/home/username/stderr.txt | sort -h >/home/username/stdout.txt