如何删除 linux bash 范围内的历史记录
How to delete history in a range in linux bash
在我的 Pi 上 Linux 和 运行 搞混了这个问题。我发现您可以使用命令 history -d linenumber
删除特定行,但是如果我想删除 运行ge 怎么办(我认为这更实用)?所以我在几个地方查找了如何循环。两种循环方式都适用于 echo 但不适用于 history 命令。我认为这是因为 "history" 实际上不是命令。但为什么这很重要?有没有简单的方法可以做到这一点?我从来不知道 Linux bash 中可以循环,所以现在我很好奇!这是我所做的:
pi@raspberry:~$ for ((i=258;i<=262;++i)); do "history -d $i"; done;
// 由于引号不正确,给出:
-bash: history -d 258: command not found
-bash: history -d 259: command not found
-bash: history -d 260: command not found
-bash: history -d 261: command not found
-bash: history -d 262: command not found
以下应该有效(但无效):
pi@raspberry:~$ for i in {5..10}; do history -d $i; done;
-bash: history: 5: history position out of range
我在这里找到了一篇文章:https://superuser.com/questions/649859/history-position-out-of-range-when-calling-history-from-bash-script
...但他们根本不清楚,并说了一些需要采购而不是执行的内容,这对我来说实际上毫无意义。如果无法通过命令行完成,请直接说明。否则,我将复习 Python,如果这是一种合乎逻辑的做法,我很高兴知道。
谢谢
假设条目存在。
如果要删除条目258到262,则将条目258删除五次。
for ((i=258;i<=262;++i)); do "history -d $i"; done;
正如您所说,由于引号的缘故根本无法正常工作
for i in {5..10}; do history -d $i; done;
正在运行,但您必须确保有 5 到 10 的条目,在您的示例中没有。
考虑到您删除的每个项目,其他项目的位置索引都会减少一个。
基本上你应该反转循环项目:
for i in {10..5}; do history -d $i; done;
循环时不受位置索引变化的影响。
编辑
正如赛勒斯所建议的,还有另一种方法。
您要移除第258至262条,共5条(含262条)
您可以删除5次位置258的条目。
利用每次删除项目时索引缩减1:
- 第一次,您删除了项目 258
- 第二次,您删除了前项目 259,已缩小到 258
- 第三次,您删除了 ex-ex-item 260,它已缩小到 259(第一次删除)和 258(第二次删除)
- 第四次删除ex-ex-ex-item 261,缩小到260(第一次删除),259(第二次删除),258(第三次删除) )
- 第五次,你删除了ex-ex-ex-ex-item 262...
在我的 Pi 上 Linux 和 运行 搞混了这个问题。我发现您可以使用命令 history -d linenumber
删除特定行,但是如果我想删除 运行ge 怎么办(我认为这更实用)?所以我在几个地方查找了如何循环。两种循环方式都适用于 echo 但不适用于 history 命令。我认为这是因为 "history" 实际上不是命令。但为什么这很重要?有没有简单的方法可以做到这一点?我从来不知道 Linux bash 中可以循环,所以现在我很好奇!这是我所做的:
pi@raspberry:~$ for ((i=258;i<=262;++i)); do "history -d $i"; done;
// 由于引号不正确,给出:
-bash: history -d 258: command not found
-bash: history -d 259: command not found
-bash: history -d 260: command not found
-bash: history -d 261: command not found
-bash: history -d 262: command not found
以下应该有效(但无效):
pi@raspberry:~$ for i in {5..10}; do history -d $i; done;
-bash: history: 5: history position out of range
我在这里找到了一篇文章:https://superuser.com/questions/649859/history-position-out-of-range-when-calling-history-from-bash-script
...但他们根本不清楚,并说了一些需要采购而不是执行的内容,这对我来说实际上毫无意义。如果无法通过命令行完成,请直接说明。否则,我将复习 Python,如果这是一种合乎逻辑的做法,我很高兴知道。
谢谢
假设条目存在。
如果要删除条目258到262,则将条目258删除五次。
for ((i=258;i<=262;++i)); do "history -d $i"; done;
正如您所说,由于引号的缘故根本无法正常工作
for i in {5..10}; do history -d $i; done;
正在运行,但您必须确保有 5 到 10 的条目,在您的示例中没有。
考虑到您删除的每个项目,其他项目的位置索引都会减少一个。
基本上你应该反转循环项目:
for i in {10..5}; do history -d $i; done;
循环时不受位置索引变化的影响。
编辑
正如赛勒斯所建议的,还有另一种方法。
您要移除第258至262条,共5条(含262条)
您可以删除5次位置258的条目。
利用每次删除项目时索引缩减1:
- 第一次,您删除了项目 258
- 第二次,您删除了前项目 259,已缩小到 258
- 第三次,您删除了 ex-ex-item 260,它已缩小到 259(第一次删除)和 258(第二次删除)
- 第四次删除ex-ex-ex-item 261,缩小到260(第一次删除),259(第二次删除),258(第三次删除) )
- 第五次,你删除了ex-ex-ex-ex-item 262...