此重定向“&gt;&gt;&amp; <filename>”是否适用于Korn shell?</filename>

时间:2009-04-27 21:10:27

标签: bash redirect ksh shell

我正在尝试重定向UNIX命令的STDOUT / STDERR并附加到korn shell中的日志文件。

rm -rf file1&gt;&gt;&amp;日志文件

这个命令会在ksh中运行还是一个典型的bash命令? 使用上述命令会对您造成什么伤害?

3 个答案:

答案 0 :(得分:7)

我使用此表单将标准输出和标准错误重定向到同一文件。

ls -ld . fred > no_fred 2>&1

刚刚在Red Hat Linux 4的Korn shell中测试过。 no_fred包含:

ls: fred: No such file or directory
drwxrwxr-x  2 user group 1024 Apr 27 17:41 .

“&gt;” 中实际上是1&gt;,表示重定向文件描述符1(标准输出)。 “2&gt;” 中重定向标准错误,因为标准错误是文件描述符2.“&amp; 1”表示“无论你正在使用文件描述符1做什么”。总而言之,这意味着“将标准输出转储到文件中,并将标准错误与其一起转储。”

此方法的一个优点是错误消息显示在正确的位置。例如,对于无法编译的文件,编译器的错误消息将在makefile的编译命令之后立即出现。

&gt;&gt;&amp; construct可能会将命令的输出附加到日志文件中,并将其放在后台。我不确定它是否会对标准错误做任何事情。我刚刚咨询了Bolsky / Korn 1989,它甚至不在那里,所以也许其他人可以解析它的作用。

更新:如果您的命令中有任何管道,那么标准 早期阶段的错误将首先出现,作为错误产生命令 运行。由于只有标准输出通过管道路由,它会 当整个管道完成时,所有都出现。

答案 1 :(得分:2)

您正尝试在ksh中使用csh语法。见杰森的回答。

答案 2 :(得分:0)

附加:

ls -ld . fred 1>> no_fred 2>&1