重定向无法正常工作,2> / dev / null变为2> / dev / null和stderr没有被重定向

时间:2013-07-02 20:40:20

标签: unix redirect xterm

我希望有人可以帮我弄清楚我可能需要覆盖的设置。我正在使用Unix终端服务器,运行Linux Xterm linux shell。每次我在shell提示符下使用grep "blah" 2> /dev/null之类的命令时,命令都以grep "blah" 2 > /dev/null运行,不用说重定向失败了。 xterm版本是X.Org 6.8.99.903(238)

我无法更新或安装任何内容,这是一个锁定的生产服务器。

感谢您对该主题的任何帮助和启发,它使我的grep在高目录级别上使用递归无效。

2 个答案:

答案 0 :(得分:9)

这是Bourne shell语法,它在c-shell中不起作用。

你能做的最好的事情是

    ( command >stdout_file ) >&stderr_file

stdout到一个文件,stderr到另一个文件。只能重定向stderr。

答案 1 :(得分:3)

在评论中,你说“一个小调,这是csh”。这不是一个小问题,这就是问题的原因。 xterm只是一个终端模拟器,而不是shell;它所做的就是设置一个提供文本输入和输出的窗口。 csh(或bash或...)是shell,用于解释您键入的命令的程序。

csh具有不同的重定向语法,并且不允许您仅重定向stderr。 command > file重定向标准输出; command >& file重定向stdout和stderr。

你说系统没有bash,但确实有ksh。我建议只使用ksh;你会更熟悉它。 bash和ksh都来自旧的Bourne shell。

所有(?)类Unix系统都将安装类似Bourne的shell /bin/sh。即使您使用csh(或tcsh?)作为交互式shell,您仍然可以调用sh,即使是在单行中也是如此。例如:

sh -c 'command 2>/dev/null'

将调用shcommand将调用/dev/null并将其stderr重定向到sh

交互式shell的目的(大部分)是让您使用系统上可用的其他命令。 {{1}}或任何shell都可以用作另一个命令。