我试图将来自终端的标准输出和标准错误(如果可能的话,用户给出的标准输入)存储在每个命令的文件中。
因此,我开始创建一个陷阱函数,以编辑的方式执行每个命令,例如:
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...)。