stderr重定向方法

时间:2012-02-24 06:35:18

标签: file redirect stderr csh tcsh

我在我的机器上运行tcsh / csh shell。最近我意识到我的stderr文件重定向无法正常工作。

请查看以下终端日志:

>echo b c >>& log
>cat log
b c
>echo $a b c >>& log
a: Undefined variable.
>cat log
b c

我从未遇到过这样的问题,因此不确定如何调试或排除故障。 请指教!

重定向的改变方法是使用tee。 虽然我使用>&或>>& ,我完全阻止任何输出显示在终端上。 有没有办法可以做到这两点,那就是:对于每个陈述

a)将stdout + stderr直接发送到文件。

b)在终端上显示stdout + stderr

我需要确认我是否可以使用这样的(下面)来满足我的要求

>csh ./script_name | tee -a log

在我的情况下,它只将stdout指向日志文件并阻止stderr。

2 个答案:

答案 0 :(得分:1)

我非常肯定$a的评估是由当前的shell 为<{1}}子shell设置重定向之前完成的?

echo实际上并没有写入文件 这一事实似乎支持了这一点,如果您删除echo文件,则可以看到在第二次尝试之前:

log

而且,如果你在明确的子shell中运行[pax ~]$ echo b c >>& log [pax ~]$ cat log b c [pax ~]$ rm log [pax ~]$ echo $a b c >> & log a: Undefined variable. [pax ~]$ cat log cat: log: No such file or directory 并为子shell而不是echo完成重定向,那么你得到了你想要的结果:

echo

事实上,即使使用有效的命令,您也可以看到这一点:

[pax ~]$ ( echo $a b c ) >> & log

[pax ~]$ cat log
b c
a: Undefined variable.

原因是当前的shell抱怨试图评估[pax ~]$ rm log [pax ~]$ $xyzzy xyzzy: Undefined variable. [pax ~]$ $xyzzy >>&log xyzzy: Undefined variable. [pax ~]$ cat log cat: log: No such file or directory 。这是有道理的。使用命令:

$xyzzy

someCmd $HOME 可执行文件将从不查看文字someCmd,它实际上已替换为该值。并且在$HOME被设置之前由shell完成替换(包括修改其标准输入或输出流)。

答案 1 :(得分:0)

您无法执行文件描述符操作以及过去20年来Csh Programming is considered harmful已经回应的口头禅。

有许多替代shell可用,甚至/ bin / sh是编程脚本比tcsh / csh更好的选择。我希望在这段时间之后没有人强迫你使用csh。