2

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

rm -rf file1 >>& 日志文件

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

4

3 回答 3

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 .

">" 实际上是 1>,表示重定向文件描述符 1(标准输出)。“2>”重定向标准错误,因为标准错误是文件描述符 2。“&1”表示“无论你对文件描述符 1 做什么”。所以总而言之,这意味着“将标准输出转储到一个文件中,以及随之而来的标准错误”。

这种方法的一个优点是错误消息出现在正确的位置。例如,编译失败的文件的编译器错误消息将出现在您的 makefile 中的编译命令之后。

>>& 构造可能会将命令的输出附加到日志文件中,并将其置于后台。我不确定它对标准错误有什么作用。我刚刚咨询了 Bolsky/Korn 1989,它甚至不在那里,所以也许其他人可以解析它的作用。

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

于 2009-04-27T22:54:03.150 回答
2

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

于 2009-04-28T16:57:28.100 回答
0

对于附加:

ls -ld . fred 1>> no_fred 2>&1 
于 2010-04-30T22:05:17.320 回答