使用 bash 函数创建 bash 的包装器

使用 bash 函数创建 bash 的包装器

我有点担心弄乱 bash 历史记录设置,我只想编写自己的自定义 bash 历史记录。我考虑过使用这样的 bash 函数:

bash(){

  # write to a custom history file manually
  echo "$@" >> $HOME/my_bash_history

  command bash "$@" 

}

export -f bash;

但这并不完全有效 - 发生的情况是 接管command bash,并且事情不再通过 bash 函数。我需要 bash 的所有标准输入来执行此 bash 函数,以便将所有内容写入自定义文件。有人知道如何做到这一点吗?

答案1

您想要的是一个DEBUG陷阱(在每个命令之前运行)或可能是一个陷阱PROMPT_COMMAND(在每个提示之前运行)。

陷阱离你的尝试更近了。基本概念概述于bash 是否有一个在执行命令之前运行的钩子?一个完善的交钥匙版本存在于bash 预执行

根据其作者的说法,bash-preexec 的用途是巴什哈布提供“云中的 bash 历史记录”,所以我确信它可以完成“文件中的 bash 历史记录”的任务。

答案2

您正在尝试实现相当于这段“永恒的历史”:

export HISTTIMEFORMAT="%s "
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND ; }"'echo $$ $USER \
           "$(history 1)" >> ~/.bash_eternal_history'

核心思想是history 1(在 bash 中)列出给 bash 的最后一行。

$ echo "$(history 1)"
12766  2019-05-31T20:14:44+0000 echo "$(history 1)"

它实际上只在脚本内具有有意义的值(不是同一行)。

和;为 bash 的每个新行PROMPT_COMMAND执行命令。history

IMO:命名一个函数似乎不是一个好主意bash

相关内容