由于Ctrl-R
搜索不完整rm -rf
并且rm -rf foo
我需要的文件意外地运行了错误的命令,它让我思考。
有没有办法清理{b}历史记录中保存rm -r foo
rm
?
这将确保如果将来意外运行该命令,它将在此之前询问
我的rm -iv
别名为rm -r
,因此我认为此操作会在不询问的情况下停止rm -r
删除(我承认在没有-i
标记的情况下我没有运行mkdir foo
cd !$
我认为这是可能的原因是基于bash bang builtins。
mkdir foo
cd foo
将在bash历史中显示:
{{1}}
编辑:虽然我很感激“不要在历史上拯救”#34;解决方案,我知道它,特别想要一个不同的解决方案,正如@tripleee解释的那样。
答案 0 :(得分:3)
我不确定这是多么万无一失;它可能会错过提供-f
选项的某种方式。也就是说,您可以使用以下内容覆盖rm
:
rm () {
local HISTIGNORE="$HISTIGNORE:command rm *"
local arg process
local -a sanitized
command rm "$@"
process=true
for arg in "$@"; do
if [[ $process && $arg = -*f* ]]; then
sanitized+=("${arg//f/}")
elif [[ $arg == -- ]]; then
process=
else
sanitized+=("$arg")
fi
done
history -s rm "${sanitized[@]}"
}
其工作原理如下:
command rm *
添加到HISTIGNORE
列表中,以便将要执行的命令添加到历史记录中。-f
选项的任何参数。 (独立或短群选项。)任何此类单词都应删除f
。已清理的单词将添加到新数组中。history -s
命令将重建的命令(带有清理的参数)添加到历史列表中。