我希望有人可以帮我弄清楚我可能需要覆盖的设置。我正在使用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在高目录级别上使用递归无效。
答案 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'
将调用sh
,command
将调用/dev/null
并将其stderr重定向到sh
。
交互式shell的目的(大部分)是让您使用系统上可用的其他命令。 {{1}}或任何shell都可以用作另一个命令。