首页 文章

tee stderr to file(csh / tcsh shell)

提问于
浏览
0

如何将STDEER重定向到一个文件,STDOUT和STDERR仍显示在屏幕上?

我在网上找到了很多方法,但它们不适用于csh / tcsh shell . 但是,我的命令不能在“bash shell”上运行 .

我知道如下:

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

但这将掩盖屏幕显示 .

1 回答

  • 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引用,重定向,条件和别名的一些粗糙边缘的一些不错的信息 . 但是,有关特定错误的一些信息已经过时了 .

相关问题