tee stderr to file(csh / tcsh shell)

时间:2016-11-02 08:54:22

标签: redirect csh tcsh tee

如何将STDEER重定向到文件以及STDOUT& STDERR仍在屏幕上显示?

我在网上找到了很多方法,但它们不适用于csh / tcsh shell。 但是,我的命令无法在" bash shell"。

中运行

我知道如下:

(命令> / dev / null)>& stderr.log

但这会掩盖屏幕显示。

1 个答案:

答案 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.txthttp://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot有一些关于(t)csh引用,重定向,条件和别名的粗略边缘的一些不错的信息。但是,有关特定错误的一些信息已经过时了。