代码之家  ›  专栏  ›  技术社区  ›  Kevin Little

制作bash脚本自跟踪的更好方法?

  •  7
  • Kevin Little  · 技术社区  · 16 年前

    我有一些关键的bash脚本,它们是由我不控制的代码调用的,在那里我看不到它们的控制台输出。我想要一个完整的跟踪这些脚本做了什么,以便以后分析。要做到这一点,我想使每个脚本自我跟踪。以下是我目前正在做的:

    #!/bin/bash
    # if last arg is not '_worker_', relaunch with stdout and stderr
    # redirected to my log file...
    if [[ "$BASH_ARGV" != "_worker_" ]]; then
        $0 "$@" _worker_ >>/some_log_file 2>&1  # add tee if console output wanted
        exit $?
    fi
    # rest of script follows...
    

    有没有更好更干净的方法?

    3 回复  |  直到 16 年前
        1
  •  13
  •   Kevin Reid    16 年前
    #!/bin/bash
    exec >>log_file 2>&1
    
    echo Hello world
    date
    

    exec 在重定向方面有一个神奇的行为:如果 命令 未指定,则任何重定向在当前shell中生效,返回状态为0。如果存在重定向错误,则返回状态为1。

    另外,关于你最初的解决方案, exec "$0" 比…好 "$0"; exit $? ,因为前者在子进程退出之前不会留下额外的shell进程。

        2
  •  2
  •   Anycorn    16 年前

    也许你在找 set -x ?

        3
  •  0
  •   acue    12 年前

    您可以检查支持bash的公共开源跟踪库。

    当前可用的组件是通过BASH进行脚本编写,很快就可以使用Python和C++。接下来还有:Ruby、Java、JavaScript、SQL、PowerShell,。。。

    许可证是Apache-2.0

    WKR公司