直到最近我才确信足球俱乐部命令在默认编辑器中打开先前执行的命令,执行已提交的更改和覆盖 bash 历史记录中的最后一项。但是,似乎新执行的命令实际上只是附加到 bash 历史记录的末尾,因此输入错误的命令(想要更正)仍然存在。
我发现 bash 历史记录中的不正确命令非常令人恼火,因为我时不时会偶然发现它们,我想知道是否可以以某种方式设置 bash shell 来覆盖编辑条目 - 我主要想覆盖上一个条目,但覆盖历史记录中任何条目的解决方案会更好!我很确定已经有类似的东西(甚至可能作为某些配置文件中的属性或在命令调用时添加一些参数),但我在网上搜索时没有得到任何有用的结果。
我已经想到了一个答案,将其作为对这个问题的回答,但如果其他人有更好的解决方案,请随时分享。
答案1
经过一段时间的使用后,我发现这个解决方案非常有前景。
将以下内容添加到您的~/.bashrc文件:
shopt -s histappend
PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
fc_override_prev_command_if_no_args() {
if [ $# -eq 0 ]; then
fc
history -d $(wc -l < ~/.bash_history)
history -w
history -c
history -r
else
fc $@
fi
}
alias fc=fc_override_prev_command_if_no_args
这样做的目的是改变行为足球俱乐部命令在不带参数调用时会出错。当带参数调用时,我让它表现得像通常那样,因为否则它的行为会误导人,如果/否则/fi阻止,并且无别的部分它根本就不会做任何事情。
另一方面,当没有提供任何参数时,那么足球俱乐部执行命令时,bash 历史记录中的最后一项将被删除,并且从文件重新加载缓存的历史记录。
我从中借用了 PROMPT_COMMAND 变量的重新分配部分这里我发现它很有用,因为提交的命令可以立即在其他当前使用 bash 打开的终端的 bash 历史记录中可用(好吧,不是真的立即可用,但即使是像发送这样的操作信号情报使用 Ctrl+C 信号就足以重新加载历史缓存)。
如果您发现解决方案的某些部分没有必要,请随意编辑此答案或发表评论。
链接到要旨使用上面的代码片段即可这里