Shell脚本不将正确的输出重定向到文件

时间:2013-09-14 06:14:05

标签: shell process

我有一个简单的问题。这是一个shell脚本

ps -a > temp

shell上的实际输出类似于:

rishis    234 564  0 22:56 pts/1    00:00:04 <command>

但是,当我查看临时文件时,输出仅为:

234 pts/1 00:00:04 <part of command>

有谁可以解释原因是什么?

1 个答案:

答案 0 :(得分:1)

这完全取决于您使用的软件的操作系统和版本,但它可能归结为:许多常见命令的设计工作略有不同,具体取决于它们是否以交互方式调用或在管道中。 (在这种情况下,重定向和管道将具有相同的结果,因为命令根据stdout是否绑定到终端来决定它们的行为)

最普遍的例子是ls:默认情况下,它以交互模式列出列中的文件,管道模式中每行列出一个文件。使用ps检查手册页中是否有记录的行为。

您可以模拟管道模式,同时通过管道连接到cat来保持输出到stdout:

ps -a | cat

另一种解释,如果你在一个奇怪的shell下面,它有一个内置的ps,但不希望在某些上下文中使用它,比如重定向。通过使用完整的/bin/ps调用来检查它。 time往往会像这样工作。