【问题标题】:POSIX sh RedirectionPOSIX sh 重定向
【发布时间】:2011-11-25 14:10:10
【问题描述】:

我可能遗漏了一些小东西,但是否有可能以符合 POSIX(破折号)的方式实现此语法:

$ ./myApp 2> stderr.txt 1> stdout.txt

我知道破折号你不能使用>&,但必须使用2>&1,但我不想这样做。我有大量数据进入标准输出,我不想解析它来获取我的标准错误。我觉得我错过了一些非常简单的东西,但我不能把手指放在它上面......

现在,当我运行上述命令时,我只得到了几行 stdout (3),但它显​​示在 stderr 文件中并且 stdout 为空。我也尝试了各种分组方式,但我仍然没有运气。不知道发生了什么...

更新

这是我正在运行的实际命令的格式,以便您可以看到我正在尝试完成的全部效果:

$ LD_PRELOAD=/usr/lib/libtcmalloc.so /usr/bin/time -p myApp -c -f inputFile 2> stderr 1> stdout

我在这里提到我尝试了多种使用 () 的分组变体。此外,可执行文件myApp 不会分叉。

我认为这个命令会起作用,但我发现不是这样:

$ LD_PRELOAD=/usr/lib/libtcmalloc.so /usr/bin/time -p (myApp -c -f inputFile) 2> stderr 1> stdout

【问题讨论】:

  • 这个语法应该有效。您是否尝试对同一个文件执行多个命令? (你的进程会分叉吗?)
  • @Random832 我更新了问题以更好地描述我在做什么。此外,我的应用程序中没有分叉操作。
  • 您可能会受到time 输出的干扰。您可能必须time sh -c 'all your stuff including redirection'(除非您要重定向的时间的输出)
  • @Random832 效果很好!我还可以在 '' 之后重定向我的时间输出,这样一切都会成功。
  • @Random832 既然您在 cmets 中回答了它,那么它是如何从这里工作的?您现在应该发布一些内容以便我可以将其标记为答案是典型的吗?还是我应该发布答案...?

标签: posix dash-shell


【解决方案1】:

自从我在 cmets 中回答后发布:

您发布的语法是正确的,但您可能会受到time 命令输出的干扰。试试

time -p sh -c 'LD_PRELOAD=/usr/lib/libtcmalloc.so command >stdout.txt 2>stderr.txt'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2019-02-27
    • 2021-05-14
    • 2019-04-06
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多