在我的Pi上玩弄Linux并遇到了这个问题。我发现您可以使用命令删除某个行history -d linenumber
但是如果我想删除一个范围(我认为更实用(怎么办?所以我查了如何在几个地方循环。两种循环方式都适用于回声,但不适用于历史记录命令。我认为这是因为"历史"实际上不是一个命令。但为什么这很重要?有没有简单的方法可以做到这一点?我从来不知道在 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,如果这是一种合乎逻辑的方法,很高兴知道。
谢谢
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
- 第二次,您删除已缩小到 258 的前项目 259
- 第三次,您删除了前项目260,该项目已缩小到259(在第一次删除中(和258(在第二次删除中( 第四次,您删除了
- 前项目261,该项目已缩小到260(在第一次删除中(,缩小到259(在第二次删除中(和258(在第三次删除中(
- 第五次,你删除了前前项目262...
假设条目存在。
如果要删除条目 258 到 262,请删除条目 258 五次。