将终端输出保存到 txt 文件

将终端输出保存到 txt 文件

为了便于交付,我被建议将程序的完整输出打印到 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 

将输出写入time文件中,为什么需要括号?

答案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-atime其附加到该文件而不是覆盖它。

/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

相关内容