lin*_*guy 12 linux bash pipe io-redirection stdout
我想将命令的 stderr 流保存到日志文件中,但我也想在屏幕上显示整个输出 (stdout + stderr)。我怎样才能做到这一点?
我只找到了将 stdout + stderr 显示到控制台并将两个流重定向到文件的解决方案:
foo | tee output.file
Run Code Online (Sandbox Code Playgroud)
但我只想将 stderr 重定向到日志文件。
ica*_*rus 11
使用最近的 bash,您可以使用进程替换。
foo 2> >(tee stderr.txt)
Run Code Online (Sandbox Code Playgroud)
这只是将 stderr 发送到运行 tee 的程序。
更便携
exec 3>&1
foo 2>&1 >&3 | tee stderr.txt
Run Code Online (Sandbox Code Playgroud)
这使得文件描述符 3 成为当前标准输出(即屏幕)的副本,然后设置管道并运行foo 2>&1 >&3。这会将 foo 的 stderr 发送到与当前 stdout 相同的位置,即管道,然后将 stdout 发送到 fd 3,即原始输出。管道将 foo 的原始 stderr 提供给 tee,tee 将其保存在文件中并将其发送到屏幕。