如何将STDEER重定向到一个文件,STDOUT和STDERR仍显示在屏幕上?
我在网上找到了很多方法,但它们不适用于csh / tcsh shell . 但是,我的命令不能在“bash shell”上运行 .
我知道如下:
(命令> / dev / null)>&stderr.log
但这将掩盖屏幕显示 .
tcsh 的IO重定向选项同时重定向stdout和stderr或仅重定向stdout .
tcsh
一种选择是将stdout重定向到 /dev/tty 然后将stderr重载到stdout和 tee 它 .
/dev/tty
tee
% (command > /dev/tty) |& tee stderr.log
请注意,这将始终写入控制台,即使在脚本中使用,然后在其他地方管道 .
你可以从tcsh中调用其他shell,所以值得一提的是它们可以做什么 .
Bourne兼容的shell只能管道stdout,但是有操作文件描述符的语法,通过使用第三个文件描述符作为临时存储,我们可以交换stdout和stderr . 序列 3>&2 2>&1 1>&3 3>&- 完成此操作,然后关闭文件描述符3 .
3>&2 2>&1 1>&3 3>&-
$ (command 3>&2 2>&1 1>&3 3>&- | tee stderr.log) 3>&2 2>&1 1>&3 3>&-
Bash和其他一些shell如zsh支持进程替换,它允许您使用命令作为源 <(...) 或目标 >(...) .
<(...)
>(...)
$ command 2> >(tee stderr.log)
如果你不介意咆哮,http://www.grymoire.com/unix/CshTop10.txt和http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot有关于(t)csh引用,重定向,条件和别名的一些粗糙边缘的一些不错的信息 . 但是,有关特定错误的一些信息已经过时了 .
1 回答
tcsh
的IO重定向选项同时重定向stdout和stderr或仅重定向stdout .一种选择是将stdout重定向到
/dev/tty
然后将stderr重载到stdout和tee
它 .请注意,这将始终写入控制台,即使在脚本中使用,然后在其他地方管道 .
你可以从tcsh中调用其他shell,所以值得一提的是它们可以做什么 .
Bourne兼容的shell只能管道stdout,但是有操作文件描述符的语法,通过使用第三个文件描述符作为临时存储,我们可以交换stdout和stderr . 序列
3>&2 2>&1 1>&3 3>&-
完成此操作,然后关闭文件描述符3 .Bash和其他一些shell如zsh支持进程替换,它允许您使用命令作为源
<(...)
或目标>(...)
.如果你不介意咆哮,http://www.grymoire.com/unix/CshTop10.txt和http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot有关于(t)csh引用,重定向,条件和别名的一些粗糙边缘的一些不错的信息 . 但是,有关特定错误的一些信息已经过时了 .