为了便于交付,我被建议将程序的完整输出打印到 txt 文件中。此外,我还需要使用我在执行脚本中实现的命令“time”打印执行时间。
#!/bin/bash
time ./blur-effect 4k.png 4k_out16.png 16 15 &>> Output.txt
我遇到的问题是程序输出正确地传输到 txt 文件,但是执行时间显示在终端中,但也必须打印在 txt 文件中。
答案1
如果你将命令包装在指挥组或子外壳:
{ time ./blur-effect 4k.png 4k_out16.png 16 15 ; } &>> Output.txt
或者
(time ./blur-effect 4k.png 4k_out16.png 16 15) &>> Output.txt
答案2
在 Bash 中,time
是一个管道的 shell 关键字它解释流重定向仅发生在定时命令(管道)上;它也恰好是一个常见的 *nix 实用程序:
$ type -a time
time is a shell keyword
time is /usr/bin/time
如果你想重定向流到/从,time
你可以使用命令组或子 shell,如 steeldriver 的回答中所述或致电time(1)
实用程序明确:
/usr/bin/time COMMAND... &> LOGFILE
或者如果你不确定time
time="$(which time)"
"$time" COMMAND... &> LOGFILE
time(1)
PS:如果您想使用该选项保留定时程序的标准错误输出不变,您可以将命令的输出保存到未连接到命令的标准错误输出(这是默认设置)的文件中-o
。-a
将time
其附加到该文件而不是覆盖它。
/usr/bin/time [-a] -o time.log COMMAND... >command-stdout.log 2>command-stderr.log
要使用 shell 关键字实现同样的效果time
(像往常一样,使用附加而不是重定向来覆盖)>>
:>
{ time COMMAND... >command-stdout.log 2>command-stderr.log; } 2>time.log
或者保存时间日志但保留计时程序的标准错误输出:
{ time COMMAND... 2>&3; } 3>&2 2>time.log