可以在以下位置找到该脚本:https : //stackoverflow.com/questions/14750650/how-to-de-delete-history-of-last-10-commands-in-shell
为了方便起见,它是:
for x in `seq $1 $2`
do
history -d $1
done
我将其放在我的包含目录(已添加到PATH的目录)中,在该目录中我运行了许多其他编写的脚本,并且工作正常。
这不会产生从我的历史记录中删除行的预期结果,实际上它什么也没做。
知道历史命令为什么不起作用的想法吗?我想知道它是否与目录有关。
附加信息:
我尝试使用该代码,并尝试了不同的变体。如果echo
在history
命令前面放置一个并运行它,则会得到以下输出:
cgravel@scspc578:~$ idelhistory 300 305
history -d 300
history -d 301
history -d 302
history -d 303
history -d 304
history -d 305
cgravel@scspc578:~$
因此,对我来说,它似乎应该可以完美运行。我不知道为什么。该脚本正在/ $ HOME / Scripts /中运行,并且已包含在PATH中。我也尝试使用sudo运行它,并且没有任何变化。
一句话:它不起作用,因为您没有正确调用它。
首先,由于您的脚本不是以开头的#!/bin/bash
,所以它实际上不是bash脚本。它是由哪个shell执行的,取决于您如何调用它。当您从bash命令行调用它时,bash会为其自身派生一个新实例(无论如何必须执行任何外部命令),而正是这个新实例执行了脚本。因此,该脚本将使用与父外壳程序相同的设置(包括迄今为止的历史记录)执行。用不同的选项执行; 特别是,脚本中的命令的历史记录跟踪已关闭(这很适合您,因为否则它会添加到您要修改的历史记录中)。
执行脚本的bash实例是否设置了HISTFILE
变量取决于其是否在父级中导出(这有点奇怪)。如果未将其导出并在子级中进行设置,则子脚本在结束时将不会保存修改后的历史记录。
如果HISTFILE
已导出,则子脚本将修改您的历史记录文件。但是,除非您已将交互式shell配置为在每个命令后重新加载历史记录,否则修改后的历史记录将仅由新启动的bash实例获取。
如果要运行影响当前Shell实例的Shell代码段,则必须在当前Shell实例中运行该Shell,而不是将其作为子进程运行。如果您想做其他会影响shell进程本身的事情,例如更改目录,设置变量等,就会遇到类似的问题。使用.
(“点”)或source
内置函数在当前shell进程中运行脚本。
. idelhistory 300 365
或者,您可以在中将其定义为函数.bashrc
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句