考虑以下Bash命令行:
time ls # Sends directory contents to stdout
time ls --foo # Sends an error message to stderr (--foo is an invalid option)
将time
的输出(正常输出和错误输出)重定向到一个文件,将ls
的输出重定向到另一个文件:
time ( ls &>ls.txt ) &>time.txt
time ( ls --foo &>ls.txt ) &>time.txt
将time
的错误输出重定向到time.txt
并将ls
的输出发送到终端:
time ( ls &>/dev/stdout ) 2>time.txt
time ( ls --foo &>/dev/stdout ) 2>time.txt
以上两行将ls
的正常输出和错误输出合并到stdout(fd 1)中。我想执行以下操作:将ls
的输出发送到终端(正常输出到stdout,错误输出到stderr),以及time
到{{1}的错误输出} 即可。从概念上讲:
time.txt
不幸的是,最后一行无法正常工作,因为time ( ls 1>/dev/stdout 2>/dev/stderr ) 2>time.txt
time ( ls --foo 1>/dev/stdout 2>/dev/stderr ) 2>time.txt
的错误输出已写入ls
。
如何将time.txt
的正常输出发送到stdout,将ls
的错误输出发送到stderr,将ls
的错误输出发送到time
吗
答案 0 :(得分:1)
这可能对您有用:
{ time ls --foo 2>&3; } 3>/dev/stderr 2>time.txt
答案 1 :(得分:0)
您可以这样做:
time (ls --foo 2>&3) 3>/dev/stderr 2>time.txt
(重定向的顺序很重要。)