Thi*_*ter 57 bash command-history
当不小心将文件粘贴到 shell 中时,它会在 bash 历史记录中放入大量丑陋的无意义条目。有没有一种干净的方法来删除这些条目?显然我可以关闭 shell 并.bash_history手动编辑文件,但也许有某种 API 可用于修改当前 shell 的历史记录?
小智 47
命令提示符中的这一行将有所帮助。
for i in {1..N}; do history -d START_NUM; done
Run Code Online (Sandbox Code Playgroud)
其中 START_NUM 是历史条目的起始位置。N 是您可能要删除的条目数。
前任: for i in {1..50}; do history -d 1030; done
Mat*_*Mat 43
从 开始bash-5.0-alpha,该history命令现在采用删除 ( -d) 选项的范围。请参阅rastafile 的回答。
对于旧版本,解决方法如下。
您可以使用history -d offsetbuiltin 从当前 shell 的历史记录中删除特定行,或history -c清除整个历史记录。
如果您想删除一系列行,这并不实用,因为它只需要一个偏移量作为参数,但是您可以将它包装在一个带有循环的函数中。
rmhist() {
start=$1
end=$2
count=$(( end - start ))
while [ $count -ge 0 ] ; do
history -d $start
((count--))
done
}
Run Code Online (Sandbox Code Playgroud)
用 调用它rmhist first_line_to_delete last_line_to_delete。(根据输出的行号history。)
(history -w用于强制写入历史文件。)
小智 16
该history内置命令的bash也需要一个范围,现在在2020年:
-d 偏移量
删除位置偏移处的历史条目。如果 offset 为负数,则将其解释为相对于比最后一个历史记录位置大 1 的位置,因此负索引从历史记录的末尾开始倒计时,而 -1 的索引指的是当前的 history -d 命令。
-d 开始结束
删除位置开始和结束之间的历史条目,包括。开始和结束的正值和负值按上述解释。
只有命令本身不告诉与--help:
Options:
-c clear the history list by deleting all of the entries
-d offset delete the history entry at position OFFSET. Negative
offsets count back from the end of the history list
-a append history lines from this session to the history file
...
Run Code Online (Sandbox Code Playgroud)
例如history -d 2031-2034,一次删除四行。您可以使用$HISTCMD从最新的 N 行向后删除。
您还可以使用 导出history -w tmpfile,然后编辑该文件,使用 清除,history -c然后使用 回读history -r tmpfile。不写入.bash_history。
小智 6
如果N从历史记录中删除行,则行N+1会移动位置N等。
出于这个原因,我宁愿识别oldest和newest之间我想删除所有的历史记录行。(注:oldest< newest)。
例如,如果我想删除从oldest = 123up 到的历史行newest = 135,我会写:
$ for i in {135..123}; do history -d $i ; done
Run Code Online (Sandbox Code Playgroud)
我发现它更容易阅读;此外:该for命令还可以减少一个范围......