我的终端工作流程涉及大量使用UP
,UP
,RETURN
导航bash历史记录。偶尔我会错误记住或错误输入UP
的数量并调用错误的命令。有时它可能有点痛苦(git clone
)或非常痛苦(git push
)。有一天,我相信我会做一些非常痛苦的事情。
由于这个原因,我发现自己避免使用某些有用但有潜在危险的命令。我可以avoid adding these commands to my history,但我喜欢我的历史。
我想将某些命令(或正则表达式测试)列入黑名单,因此如果我使用我的历史记录调用它们,则需要在执行前进行确认:
$ git status
$ rm -rf node_modules # typed - no confirmation
$ rm -rf node_modules # UP, RETURN - confirmation
Blacklisted command - Are you sure? (yes/no)?
答案 0 :(得分:1)
shell不直接支持此功能,部分原因是命令在执行之前存储在历史记录中。但是,您可以通过将“危险”命令包装在优先于实际命令的函数中来伪造它。例如:
rm () {
local regex='[Yy]'
if history | sed '$d' | pcregrep -q "^\s+\d+\s+${FUNCNAME} $*"; then
read -p 'Are you sure? '
[[ "$REPLY" =~ $regex ]] || return 1
fi
command "$FUNCNAME" "$@"
}
秘诀就是sed命令,它删除了刚刚存储在历史记录中的当前命令。没有它,grep将总是在历史记录中找到命令。