我有点担心弄乱 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
。