为了防止在bash历史记录中记录“危险”命令,我在.bashrc
文件中添加了以下行:
HISTIGNORE='rm *:mv *:cp *:cat*>*:pv*>*'
这行之有效,但有副作用:我看不到在计算机上执行的命令的完整历史记录。假设我有几台用于实验的机器,并且希望能够看到所有执行的命令。我将使用bash内部history
显示执行的命令,也许还可以显示今天的日期的grep:
history | grep Sep-28
我想做的是也记录“危险”命令,但是#
在行的开头放置一个,这样,如果我偶然从历史记录中错误地执行了该命令,将不会造成任何损失。
我不知道这是否可能。
更新和说明:
对我来说这是个问题的主要原因是,我通常从多个终端连接到我的机器,并且在一个终端上执行的任何命令都会立即读入其他终端的历史记录中。这是通过实现
PROMPT_COMMAND="history -a; history -c; history -r"
假设我有两个开放的终端。在一个我有一些cat /dev/foo > file.out
进程正在运行。在第二个中,我使用查看进度ls -lAhF
。我一直ls
通过按Up和ENTER(即历史记录中的最后一条命令)重复操作。第一个命令完成后,历史记录中的最后一个命令将不再是ls
,而是cat /dev/foo > file.out
。如果我不小心,我将再次启动cat并覆盖file.out。
我想实现的是cat命令将以开头#
,这样它就不会被执行。但是,我仍然会在历史记录中看到它,并且可以通过取消注释它来重用它(如果这是一个长命令)。
watch ls -lAhF
或while sleep 1; do ls -lAhf; done
; 而不是手动重复命令。无需查看文件大小,您可以使用pv /dev/foo > file.out
(ivarch.com/programs/pv.shtml)。