在 ZSH 中获取上一个命令的输出日志

在 ZSH 中获取上一个命令的输出日志

我正在编写一个辅助脚本,该脚本需要在每个命令之后运行以分析其退出状态和输出日志。

我知道 stdout/stderr 缓冲区不存储在伪终端上。因此,我寻找一种方法,在执行每个命令之前将此输出“保存”到临时文件中,然后在执行完命令之后读取它。

以下是我添加到我的的内容.zshrc

LAST_OUTPUT_LOG_FILE="$HOME/zero.log"
exec 3>&1 1> >(tee $LAST_OUTPUT_LOG_FILE >&3)
# based on https://superuser.com/a/1111512/1748711
echo "Using $LAST_OUTPUT_LOG_FILE"

precmd () {
    LAST_STATUS=$?
    LAST_COMMAND=$(fc -ln -1)
    echo "Last command: $LAST_COMMAND exited with status $LAST_STATUS"
    echo "--------------- LAST COMMAND LOG $LAST_OUTPUT_LOG_FILE ---------------"
    cat $LAST_OUTPUT_LOG_FILE
    echo "--------------- LAST COMMAND LOG $LAST_OUTPUT_LOG_FILE ---------------"
    # run my script here with the last command, its status and its output

    # reset the log file
    echo "" > $LAST_OUTPUT_LOG_FILE
}

除非我加载一个新终端并输入命令(比如说ls)我收到以下错误:

precmd:echo:3: write error: broken pipe
precmd:3: write error: broken pipe
precmd:echo:4: write error: broken pipe
precmd:4: write error: broken pipe
precmd:echo:6: write error: broken pipe
precmd:6: write error: broken pipe

我试图实现的目标有可能实现吗?如果可以,我这里缺少什么?

干杯!

答案1

我在这里遗漏了什么?

使用以下方法检查代码ShellCheck – shell脚本分析工具

$ shellcheck myscript
 
Line 2:
LAST_OUTPUT_LOG_FILE="~/zero.log"
                      ^-- SC2088 (warning): Tilde does not expand in quotes. Use $HOME.

尝试修复它。

相关内容