如何既审查 .bash_history 之外的命令,又能够使用向上箭头返回该命令?

如何既审查 .bash_history 之外的命令,又能够使用向上箭头返回该命令?

当在命令前面添加一个空格字符时,它就会从历史记录中消失。但这也导致该命令不易编辑和重新运行。

如何制作较弱版本的空间审查命令,使其仅从永久历史记录中消失,而不是从内存中消失?

                                  `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'

相关内容