POSIX sh 重定向

Posted

技术标签:

【中文标题】POSIX sh 重定向【英文标题】:POSIX sh Redirection 【发布时间】: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 中回答了它,那么它是如何从这里工作的?您现在应该发布一些内容以便我可以将其标记为答案是典型的吗?还是我应该发布答案...? 【参考方案1】:

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

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

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

【讨论】:

以上是关于POSIX sh 重定向的主要内容,如果未能解决你的问题,请参考以下文章

sh 通过命令行检查重定向

sh db2恢复重定向

sh db2恢复重定向

sh 将stderr重定向到stdout

sh 301重定向

sh 在shell中重定向