当前位置: 首页>>技术问答>>正文


如何从bash历史中删除选定的结果?

,

问题描述

history命令显示所有结果,但我们可以使用history | grep searchingCommand进行过滤以获取特定命令。这真的很有帮助。

但问题是它显示了那些输入错误或不成功的命令。然后确定正确的那个真的很痛苦。我查了这个链接:Selective command-history in the terminal?但这不是我的解决方案。

那么有没有办法从历史记录中删除那些在输入时或之后不正确的命令?

最佳解决方法

我想添加另一种修改(或删除)历史条目的方法,我在使用bash时偶然发现了这种方法:

为了演示这一点,首先在bash中执行以下三个命令:

$ echo 1
1
$ echo 2
2
$ echo 3
3

您现在可以使用箭头键或Ctrl + pCtrl + n再次选择这些命令。

假设您要修改前两个命令。移动历史记录直到出现echo 1并将其更改为echo 1 - changed,但不要按ENTER键。如果您现在进一步浏览历史记录,此行将保持其修改状态,您可以离开并返回到该行。现在转到echo 2行并将其更改为echo 2 - changed,再次不要按回车键。要保存对这些行的更改,请选择历史记录中除此之外的任何命令,然后单击Ctrl + c

当然,您也可以删除它,而不是修改历史记录条目,这将导致该条目的空行。要删除提示中当前显示的行,请按Ctrl + e(跳转到行尾),然后按Ctrl + u(删除行开头到光标的文本)。

有关技术背景的更详细说明,另请参阅https://unix.stackexchange.com/questions/195668/what-can-cause-an-item-to-be-deleted-from-my-bash-history/195726#195726

最简单的方法:

  1. ctrl + r用于搜索要删除/修改的命令。

  2. end用于选择要删除/修改的搜索命令

  3. 删除或修改所选命令(不要按enterctrl + c)

  4. 向上箭头(或ctrl + p)或向下箭头(或ctrl + n)以选择任何其他命令。

  5. ctrl + c就是这样!

注意:

这仅更改当前会话命令。如果我们想要更改旧命令并保存更改,我们需要在关闭终端之前运行以下命令:

history -w

次佳解决方法

使用:

history -d OFFSET

删除偏移量OFFSET中的历史记录条目,甚至在它添加到bash历史记录文件之前。要找到合适的OFFSET,您只需要运行history命令。它是从行首开始的数字,其中包含要删除它的历史记录条目。

并保存对历史使用的修改:

history -w

请参阅this guide中的更多详细信息。

第三种解决方法

编辑文件~/.bash_history并使用拼写错误删除一次

例如,插入以下命令:

gedit ~/.bash_history

编辑您喜欢和之后的内容而不是保存文件并重新启动终端。 root命令是:

sudo -i 
inser your password
gedit ~/.bash_history

如果你想删除所有history -c应该做的伎俩


SYNTAX

history history [n] history -c history -d offset history [-anrw] [filename] history -ps arg 

KEY

-c Clear the history list. This may be combined with the other options to replace the history list completely.

-d offset Delete the history entry at position offset. offset should be specified as it appears when the history is displayed.

-a Append the new history lines (history lines entered since the beginning of the current Bash session) to the history file.

-n Append the history lines not already read from the history file to the current history list. These are lines appended to the history file since the beginning of the current Bash session.

-r Read the current history file and append its contents to the history list.

-w Write out the current history to the history file.

-p Perform history substitution on the args and display the result on the standard output, without storing the results in the history list.

-s The args are added to the end of the history list as a single entry.

资源:

第四种方法

如果要立即从同一终端立即删除它,则必须将以下内容添加到〜/.bashrc文件中。

PROMPT_COMMAND='history -a' 

并重新启动您的终端。

你可以在.bashrc文件中的任何地方添加它。我已经添加了如下以及其他历史相关的东西。

bash,ubuntu

通常在bash会话期间,执行的命令不会写入.bash_history,直到会话终止,因此PROMPT_COMMAND='history -a'输入命令然后进入.bash_history。

现在,无论何时在命令中出错或想要删除它,然后执行以下操作

sed -i '$d' ~/.bash_history

和tada它将被删除。

为了使它更简单,你可以将它别名化为更简单的东西,并使用它

alias rh ='sed -i '\''$d'\'' ~/.bash_history'

因此,执行rh将从历史记录中删除最后执行的命令。

以上是临时别名,只持续会话。使其永久或持久添加

alias rh = 'sed -i '\''$d'\'' ~/.bash_history' 

到.bashrc

注意

=两侧不应有任何空间

如果您不想要别名,那么您也可以执行以下操作

创建一个名为rh的逗号,并将其放在/bin目录中:

  • 打开文件说rh并粘贴以下代码,保存并关闭:sed -i '$d' ~/.bash_history

  • 使rh可执行并将其放在/bin目录中:chmod + x rh sudo cp rh /bin

  • 现在使用rh命令从历史记录中删除最近的命令。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1653.html,未经允许,请勿转载。