如何将STDEER重定向到文件以及STDOUT& STDERR仍在屏幕上显示?
我在网上找到了很多方法,但它们不适用于csh / tcsh shell。 但是,我的命令无法在" bash shell"。
中运行我知道如下:
(命令> / dev / null)>& stderr.log
但这会掩盖屏幕显示。
答案 0 :(得分:0)
tcsh
的IO重定向选项同时重定向stdout和stderr,或者只是stdout。
一个选项是将stdout重定向到/dev/tty
,然后将stderr复制到stdout并tee
。
% (command > /dev/tty) |& tee stderr.log
请注意,这将始终写入控制台,即使在脚本中使用,然后在其他地方管道。
您可以从tcsh内部调用其他shell,因此值得一提的是它们可以做什么。
与Bourne兼容的shell只能管道stdout,但是有操作文件描述符的语法,通过使用第三个文件描述符作为临时存储,我们可以交换stdout和stderr。序列3>&2 2>&1 1>&3 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引用,重定向,条件和别名的粗略边缘的一些不错的信息。但是,有关特定错误的一些信息已经过时了。