4

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

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

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

4

2 回答 2

9

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

你能做的最好的就是

    ( command >stdout_file ) >&stderr_file

您在哪里获得 stdout 到一个文件,而 stderr 到另一个文件。仅重定向 stderr 是不可能的。

于 2013-07-02T20:47:14.163 回答
3

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

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

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

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

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

将调用sh,而后者又将调用command并将其 stderr 重定向到/dev/null.

交互式 shell 的目的(主要)是让您使用系统上可用的其他命令。sh,或任何 shell,都可以用作另一个命令。

于 2013-07-02T21:04:38.430 回答