当在命令前面添加一个空格字符时,它就会从历史记录中消失。但这也导致该命令不易编辑和重新运行。
如何制作较弱版本的空间审查命令,使其仅从永久历史记录中消失,而不是从内存中消失?
`command` ` command` I want
Saved to .bash_history: Yes No No
Can uparrow, edit and re-execute: Yes No Yes
答案1
据我所知,bash中没有这样的功能。
一种可能的解决方法是将命令放入别名或函数中,并从命令历史记录中省略别名/函数定义。您仍然可以使用别名/函数,其使用情况将写入历史文件中,但函数定义本身将仅保留在内存中。例如,在下面的会话中,命令mysql -p$(mysql_password)
将被写入历史文件,但密码本身不会写入历史文件,因为命令alias mysql_password=…
有一个前导空格。
$ HISTCONTROL=ignorespace
$ alias mysql_password=$(echo swordfish)
$ mysql -p$(mysql_password)
如果要编辑函数定义,可以使用declare -f foo
(alias foo
作为别名) 将其打印出来,并使用输出来定义一个新函数(外部编辑器可能会有所帮助,或者shell-expand-line
读行函数这必然是C-M-e
)。
或者,切换到 zsh 并设置HISTORY_IGNORE
多变的。与此模式匹配的命令存储在内存历史记录中,但不会写入历史文件。您无法逐个命令来决定,但您可以包含一个标记,例如#dontstore
在 command 和 set 中HISTORY_IGNORE='\#dontstore'
。