我正在尝试记录命令执行的时间,因此我是通过time
在 bash 中使用内置命令来实现的。我还希望同时将 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 &
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
您正在使用1>&2
而不是2>&1
.
随着名称长度的减少,您正在尝试运行:
bash -c 'time doxygen Doxyfile > doxygen.log 1>&2' genfile > doxygen.time 1>&2 &
Run Code Online (Sandbox Code Playgroud)
的> doxygen.log
发送标准输出到文件; 在1>&2
随后改变了主意,将标准输出到同一个地方标准错误是怎么回事。与外部重定向对类似。
如果您使用:
bash -c 'time doxygen Doxyfile > doxygen.log 2>&1' genfile > doxygen.time 2>&1 &
Run Code Online (Sandbox Code Playgroud)
然后你将标准错误发送到标准输出的同一个地方——两次。
顺便说一句,您是否意识到genfile
用作$0
由 运行的脚本bash -c '…'
?我不相信您的脚本中需要它。要看到这一点,请尝试:
bash -c 'echo 0=$0; echo 1=$1; echo 2=$2' genfile jarre oxygene
Run Code Online (Sandbox Code Playgroud)
运行时,这会产生:
0=genfile
1=jarre
2=oxygene
Run Code Online (Sandbox Code Playgroud)