如何将bash历史记录保存到$PWD/.history文件中?

3
我正在开发一个开源项目来跟踪研究活动。在其中一个模块中,我想将一个文件夹的命令历史记录到同一文件夹下的文件(.history)中。 示例: 比方说,我正在工作的文件夹是 /Users/ravi/test-project/。我在该文件夹中使用了一些命令来开始我的工作。比如说,我执行了以下命令:
$wget https://mywebsite.com/script.py
$chmod +xw script.py
$echo "append some text " >  script.py 
$python script.py

我希望将所有这些命令保存到文件夹ie的.history文件中,例如/Users/ravi/test-project/.history
非常感谢您的帮助。提前致谢。

请参考 https://dev59.com/dnA75IYBdhLWcg3wUHSQ 了解如何在切换目录时执行命令。您可以使用此功能来更改 $HISTFILE - Barmar
更改目录的方法看起来很有趣,我唯一担心的是如果用户从右键菜单中选择“在此处打开终端”,那么这种方法是否有效。我会深入挖掘它,谢谢。 - rrmerugu
我不明白为什么它不能工作。每次显示 shell 提示符时,它都会运行该函数。 - Barmar
关于$HISTFILE。我在文件夹中尝试使用export HISTFILE=$PWD/.bash_history,但它没有创建.bash_history文件或保存历史记录。你有什么想法 @Barmar - rrmerugu
默认情况下,它不会保存历史记录,直到 shell 退出。在那时,它将使用 HISTFILE 的当前值。请参考 http://askubuntu.com/questions/67283/is-it-possible-to-make-writing-to-bash-history-immediate 了解如何使其在每个命令后立即保存。 - Barmar
1个回答

4

这实际上相当容易:

PROMPT_COMMAND="history -a; history -c; history -r; HISTFILE=\${PWD}/.history"

这首先确保在每次提示时都写入并重新读取历史记录*。然后它将历史文件变量更改为使用当前目录。示例会话:
$ echo "$PWD"
/home/username
$ cd /tmp
$ echo "$PWD"
/tmp
$ cat ~/.history 
echo "$PWD"
cd /tmp
$ cat .history
echo "$PWD"

正如您所看到的,cd命令被存储在执行该命令的目录的历史文件中,而echo命令则被存储在两个历史文件中。
需要注意的一个副作用是,历史记录现在在每个终端之间共享。我喜欢这个功能,但并不是每个人都喜欢。
此外,如果您正在寻找审计而不是历史记录的便利性,则可能应该考虑启用auditd或类似的内容。
* 不用担心,即使有数千行历史记录,它也非常快速。

这正是我需要的:D,我欠你一瓶啤酒。干杯。感谢你的好解释。 - rrmerugu
如果我有机会去海得拉巴,当然可以!祝你的项目好运! - l0b0
当然,谢谢你:D - rrmerugu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接