考虑以下 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
的错误输出> 到 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
中。
如何将ls
的正常输出发送到stdout,ls
的错误输出发送到stderr,以及time<的错误输出
到 time.txt
?
最佳答案
这可能对你有用:
{ time ls --foo 2>&3; } 3>/dev/stderr 2>time.txt
关于bash - 对 Bash 重定向的细粒度控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9239231/