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 重定向的主要内容,如果未能解决你的问题,请参考以下文章