使用crunch生成自定义密码字典时出现bash: !@#: event not found错误如何解决
报错原因
该报错由Bash的历史展开机制触发:!是Bash默认的历史命令调用符,当未被转义或包裹时,Bash会将!开头的字符串当作历史事件进行匹配,你输入的字符集中包含!@#序列,Bash找不到对应的历史命令就抛出了该错误。
除此之外你输入的字符集还包含反引号、$、&、引号、反斜杠等大量Bash特殊元字符,未做处理的情况下都会被Bash提前解析,不会原样传递给crunch程序,还会引发其他潜在报错。
解决方法
两种方案任选其一即可:
- 方案1(最推荐):用单引号包裹字符集参数
单引号会禁用内部所有元字符的特殊含义,内容会原样传递给crunch。因字符集本身包含单引号,需要对内部单引号做特殊处理,修改后命令如下:
crunch 4 4 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`~!@#$%^&*()_+-=[]{}\|'"'"';:/?.>,<' -o out.txt
- 方案2:临时关闭Bash历史展开
先执行以下命令关闭历史展开功能:set +H
再运行你原本的crunch命令即可正常执行。如果需要恢复历史展开功能,执行set -H即可。
内容的提问来源于stack exchange,提问作者Aso
相关产品推荐
相关产品推荐

