重用和修改条目时如何停止bash编辑历史记录?


20

当您重新使用和编辑上一个命令时,某些bash实例会更改命令历史记录,而其他实例显然不会。我一直在搜索,但是找不到说明如何防止历史记录中的命令在重用和编辑时被修改的内容。

有这样的问题这一个,但似乎说如何应对历史正在编辑。我最近才遇到一个bash实例,该实例在您重用命令时会编辑历史记录-我使用过的所有以前的bash shell(据我所知)都配置为在重用时不更改历史记录并编辑命令。(也许在过去的十五年左右的时间里,我一直没有适当注意我的外壳历史...)

因此,这可能是最好的问题:我可以告诉bash从不修改历史记录吗?


您可以history -p用来进行历史记录扩展而不会影响历史记录文件。您可以执行history -s相同操作并将其追加到历史记录中,而无需执行。您可以HISTIGNORE='start of a command I never want in history.*:command2.*'将某些命令保留在历史记录之外。
mikeserv 2014年

1
不将set revert-all-at-newline on你链接解决您的问题,这个问题吗?您能说明如何重现问题吗?请注意,您还可以zsh将行为用于更符合您想要的行为。
斯特凡Chazelas

@mikeserv查看手册页,history -p对于我要重用的每个命令,我都需要做些什么-是吗?如果是这样,那不是我想要的。如前所述,我使用过bash实例,这些实例在重用和编辑命令时不会修改历史记录。
理查德·怀斯曼

@StéphaneChazelas不,我认为不是revert-all-at-newline我所需要的。如果我编辑命令并按CTRL-C取消它,我也不希望它影响历史记录。我以前从未需要配置bash来修改历史记录,这就是为什么有时重新安装会以一种方式而有时又以另一种方式表现出来的原因之一。顺便说一下,在不编辑命令重用历史记录的实例上,a bind -V | grep revert表示revert-all-at-newline设置为“ off”。
理查德·怀斯曼

2
实际上,这与无关bash。这一切都与readline有关。readline库有不同的实现,它也有自己的一组设置(其中有很多)和自己的配置文件。我不确定这是设置还是实现上的差异,但是您应该搜索与readline相关的文档,而不是bash。
Orion

Answers:


9

原来revert-all-at-newline是答案。我需要set revert-all-at-newline on~/.inputrc文件中包含该文件,因为set在bash提示符下使用该命令无效。(然后,当然,我必须启动一个新的shell。)

另外,我发现~/.inputrc已加载而不是 /etc/inputrc如果已加载,这意味着在创建时,后者中定义的任何默认值都不再有效~/.inputrc。为了解决这个问题,开始~/.inputrc$include /etc/inputrc

感谢@StéphaneChazelas为我指出正确的方向。


0

在〜/ .bashrc中,您可以添加

shopt -s histappend

谢谢,但这对我遇到的问题没有影响。我刚刚检查并histappend打开,但是我的历史记录仍显示对先前命令的编辑。
理查德·怀斯曼

我已经搜索了bash手册页,并且找到了编辑历史记录的规则。Readline命令名称它具有很强的描述性,但是除了所需的选项,我没有看到其他选项:redraw-current-line刷新当前线。
杰夫·科尔曼

此外,还有一个复归,全在换行选项,默认为关闭
杰夫·科尔曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.