防止 bash 中的意外历史记录编辑
Prevent accidental history editing in bash
我最近从 tcsh 切换到 bash,而一直困扰我的一件事是 bash 如何处理历史记录。我经常调出以前的历史命令并开始编辑它,但意识到我需要先 运行 一个不同的命令。在 bash 中,这会编辑原始命令,我看不到我最初输入的内容。在 tcsh 中,当我使用向上和向下箭头时,编辑的命令位于堆栈底部,准备好继续编辑或 运行 时,我准备好了。
我找到了 this question,其中有几个答案有助于理解 bash 在重新 运行 和编辑历史方面的工作原理,但我仍然不知道改变这种行为的方法(如果存在这样的事情)。是否可以防止 bash 编辑已经 运行 的命令?
例如,如果我 运行
abcd
efgh
ijkl
然后使用向上箭头和退格 efgh 到 efg,然后按下并键入不同的命令 "mnop",我希望我的历史记录如下所示:
abcd
efgh
ijkl
mnop
目前看起来像:
abcd
* efg
ijkl
mnop
这似乎是一个微不足道的问题,但是当 运行使用需要反复试验的多个管道执行长命令时,这会导致大量工作损失。
每一行都有自己的撤消列表,您可以使用 C-x C-u
或 C-_
来撤消最近的更改,或使用 M-r
来恢复自上次保存以来的所有更改.
Is it possible to prevent bash from editing the commands that have already been run?
可以避免这种情况 "feature"。我通过 this answer over on unix.stackexchange.
找到了解决方案
总而言之,您需要启用默认关闭的 revert-all-at-newline
readline 设置。如果设置开启,那么 bash 将在您执行下一个命令时恢复您对历史记录所做的任何更改。
要在您的 shell 中启用此设置,您应该将以下内容添加到您的 ~/.inputrc
文件中,然后重新启动您的 shell:
$include /etc/inputrc
set revert-all-at-newline on
第一行是必需的,因为我猜想如果您提供自己的 .inputrc
文件,则默认的 /etc/inputrc
文件不会包含在内,这可能不是您想要的。
我最近从 tcsh 切换到 bash,而一直困扰我的一件事是 bash 如何处理历史记录。我经常调出以前的历史命令并开始编辑它,但意识到我需要先 运行 一个不同的命令。在 bash 中,这会编辑原始命令,我看不到我最初输入的内容。在 tcsh 中,当我使用向上和向下箭头时,编辑的命令位于堆栈底部,准备好继续编辑或 运行 时,我准备好了。
我找到了 this question,其中有几个答案有助于理解 bash 在重新 运行 和编辑历史方面的工作原理,但我仍然不知道改变这种行为的方法(如果存在这样的事情)。是否可以防止 bash 编辑已经 运行 的命令?
例如,如果我 运行
abcd
efgh
ijkl
然后使用向上箭头和退格 efgh 到 efg,然后按下并键入不同的命令 "mnop",我希望我的历史记录如下所示:
abcd
efgh
ijkl
mnop
目前看起来像:
abcd
* efg
ijkl
mnop
这似乎是一个微不足道的问题,但是当 运行使用需要反复试验的多个管道执行长命令时,这会导致大量工作损失。
每一行都有自己的撤消列表,您可以使用 C-x C-u
或 C-_
来撤消最近的更改,或使用 M-r
来恢复自上次保存以来的所有更改.
Is it possible to prevent bash from editing the commands that have already been run?
可以避免这种情况 "feature"。我通过 this answer over on unix.stackexchange.
找到了解决方案总而言之,您需要启用默认关闭的 revert-all-at-newline
readline 设置。如果设置开启,那么 bash 将在您执行下一个命令时恢复您对历史记录所做的任何更改。
要在您的 shell 中启用此设置,您应该将以下内容添加到您的 ~/.inputrc
文件中,然后重新启动您的 shell:
$include /etc/inputrc
set revert-all-at-newline on
第一行是必需的,因为我猜想如果您提供自己的 .inputrc
文件,则默认的 /etc/inputrc
文件不会包含在内,这可能不是您想要的。