【问题标题】:Shell script not redirecting correct output to a fileShell 脚本未将正确的输出重定向到文件
【发布时间】:2013-09-14 06:14:04
【问题描述】:

我有一个简单的问题。这是一个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>

谁能解释一下可能是什么原因?

【问题讨论】:

  • 您正在开发哪个操作系统?它在 OS X 上对我来说很好用。
  • 我不确定,但试试这个 - 使用绝对路径运行它/bin/ps -a &gt; temp
  • 我的错。罪魁祸首是 .bashrc (ps = 'ps -aef') 中的别名条目,它在 shell 提示符下对正常的 ps 造成了详细响应。脚本的输出是正确的。所以是的,使用绝对 ps 路径会有所帮助。谢谢

标签: shell process


【解决方案1】:

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

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

您可以模拟管道模式,同时通过管道传输到 cat:

ps -a | cat

另一个解释,如果你在一个足够奇怪的外壳下,它有一个内置的 ps,但不希望在某些情况下使用它,比如重定向。通过使用完整的 /bin/ps 调用来检查。 time 倾向于这样工作。

【讨论】:

  • 我的错。罪魁祸首是 .bashrc (ps = 'ps -aef') 中的别名条目,它在 shell 提示符下对正常的 ps 造成了冗长的响应。脚本的输出是正确的。所以是的,使用绝对 ps 路径会有所帮助。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 2020-09-21
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
相关资源
最近更新 更多