【问题标题】:Save the output of the time command to a log file将 time 命令的输出保存到日志文件
【发布时间】:2013-03-12 20:14:06
【问题描述】:

我有一个脚本 hex.bat,它有:

#!/bin/bash
HEX_ROOT=.
HEX_COLOURS=./data
HEX_PDB=.
HEX_MACROS=.
HEX_CACHE=./data

time ./hex6i.x64 -kill -nogui -ncpu 1 -ngpu 1 -e dock.mac -l job.log

所有的输出都到job.log,除了时间。我想在jog.log 中保存执行此脚本的持续时间。有人知道吗?

提前致谢。

【问题讨论】:

    标签: linux shell logging


    【解决方案1】:

    time 将其输出写入标准错误,而不是标准输出,以便将报告放在不同的输出流中。通常希望对正在将输出写入文件的程序进行计时,例如,不将时间输出放入日志中。

    如果您确实希望时间输出进入日志,您有几个选择:

    1. 使用time-o 和可能的-a 选项将time 的输出写入日志文件。您的time 实现可能有也可能没有这些选项。

    2. 重定向标准错误:time .... 2>> job.log2>&1。前者写入同一个日志文件(通过追加);后者将标准错误输出发送到标准输出的任何位置。请注意,两者都会影响time 以及time 本身运行的程序。

    【讨论】:

    • 确实,而且是故意的。如果您只关心时间的输出,那么重定向标准输出是没有意义的。从最初的问题来看,正在运行的程序显然有自己的日志管理和重定向其标准输出可能是不可取的。 (我的回答中有一个“以及”可能令人困惑;我会摆脱它。)
    • 如果您收到消息 -o: command not found - 不要忘记 time 是 bash 中的关键字。您可能需要改用command time/usr/bin/time - askubuntu.com/a/86196/227180
    【解决方案2】:

    我得到了使用括号

    #!/bin/bash
    HEX_ROOT=.
    HEX_COLOURS=./data
    HEX_PDB=.
    HEX_MACROS=.
    HEX_CACHE=./data
    
    (time ./hex6i.x64 -kill -nogui -ncpu 1 -ngpu 1 -e dock.mac -l job.log) &> job.log
    

    【讨论】:

    • 如果将输出写入与实际命令相同的文件,则应使用“&>>”,否则时间输出将覆盖命令中的日志。
    猜你喜欢
    • 2018-08-08
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2016-07-13
    • 2012-11-30
    相关资源
    最近更新 更多