想要在终端中执行的上一个命令的终端输出(stderr 和 stdout)

想要在终端中执行的上一个命令的终端输出(stderr 和 stdout)

我试图将来自终端的标准输出和标准错误(如果可能的话,用户给出的标准输入)存储在每个命令的文件中。

因此,我开始创建一个陷阱函数,以编辑的方式执行每个命令,例如:

shopt -s extdebug

preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND

    eval `history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//"` |& tee ~/recent_output.txt
    return 1 # This prevent executing of original command
}
trap 'preexec_invoke_exec' DEBUG


并保存上述文件并执行:

source file.sh

这完成了我想要的工作,但阻止了一些命令的执行,例如:

cd ..

原因是管道创建一个子 shell,然后执行其中的每个命令。所以主壳不受影响。

甚至 Bash 的脚本功能也是如此:

script ~/recent_output.txt

exit有效,但仅在您在终端中执行后才给出输出。

所以,基本上我想存储/获取在 bash 终端中执行的上一个命令的输出。您可以帮助我使用任何语言(golang、Python...)。

相关内容