为什么我不能在bash -c命令行中重定向stderr?

时间:2015-08-29 16:08:08

标签: bash cygwin

我正在尝试记录执行命令的时间,所以我是通过在bash中使用内置time命令来实现的。我还希望将stderr和stdout同时重定向到日志文件。但是,它似乎没有工作,因为stderr只是溢出到我的终端上。

这是命令:

rm -rf doxygen
mkdir doxygen
bash -c 'time "/cygdrive/d/Program Files/doxygen/bin/doxygen.exe" Doxyfile > doxygen/doxygen.log 1>&2' genfile > doxygen/time 1>&2 &

我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

您使用1>&2代替2>&1

随着名字长度的减少,你正试图运行:

bash -c 'time doxygen Doxyfile > doxygen.log 1>&2' genfile > doxygen.time 1>&2 &

> doxygen.log将标准输出发送到文件; 1>&2然后改变主意并将标准输出发送到标准错误发生的同一位置。与外部重定向相似。

如果您使用:

bash -c 'time doxygen Doxyfile > doxygen.log 2>&1' genfile > doxygen.time 2>&1 &

然后将标准错误发送到标准输出所在的位置 - 两次。

顺便提一下,您是否意识到genfile用作$0运行的脚本的bash -c '…'?我不相信你的剧本需要它。要看到这一点,请尝试:

bash -c 'echo 0=$0; echo 1=$1; echo 2=$2' genfile jarre oxygene

运行时,会产生:

0=genfile
1=jarre
2=oxygene