为了防止在 bash 历史记录中记录“危险”命令,我在我的.bashrc文件中添加了以下行:
HISTIGNORE='rm *:mv *:cp *:cat*>*:pv*>*'
Run Code Online (Sandbox Code Playgroud)
这很有效,但它有一个副作用:我看不到在机器上执行的命令的完整历史记录。假设我有几台机器进行实验,我希望能够看到所有执行的命令。我会使用 bash internalhistory来显示已执行的命令,也许是今天的 grep :
history | grep Sep-28
Run Code Online (Sandbox Code Playgroud)
我想要做的是也记录“危险”命令,但#在行的开头放一个,这样如果我碰巧错误地执行了历史记录中的命令,就不会造成任何损害。
我不知道这是否可能。
这对我来说是个问题的主要原因是我通常从多个终端连接到我的机器,并且在一个终端上执行的任何命令都会立即读入其他终端的历史记录。这是通过
PROMPT_COMMAND="history -a; history -c; history -r"
Run Code Online (Sandbox Code Playgroud)
假设我打开了两个终端。在一个我有一些cat /dev/foo > file.out进程运行。第二,我用ls -lAhF. 我ls通过按Up和ENTER(即历史记录中的最后一个命令)不断重复。第一个命令完成后,历史记录中的最后一个命令不再是ls,而是cat /dev/foo > file.out。如果我不小心,我会再次启动cat并覆盖file.out。
我想实现的是 cat 命令前面带有 a #,这样它就不会被执行。但是,我仍然会在历史记录中看到它,并且可以通过取消注释来重用它(如果它是一个长命令)。