Tim*_*ske 4 bash command-history glob
在 GNU bash,版本 4.2.45(1)-release (x86_64-redhat-linux-gnu),Fedora 19 中执行以下代码...
shopt -s extglob
export HISTIGNORE="!(+(!([[\:space\:]]))+([[\:space\:]])+(!([[\:space\:]])))"
declare -p HISTIGNORE
Run Code Online (Sandbox Code Playgroud)
... 使 bash 完全停止。此后它不会打印命令提示符。这是为什么。
背景:
我只想告诉 bash 忽略任何简单的命令,即一个单词的命令。Bash 不应该记住像cd, pwd,history等命令行。我对HISTIGNORE变量的原始定义如下所示:
export HISTIGNORE="!(+(!([[:space:]]))+([[:space:]])+(!([[:space:]])))"
Run Code Online (Sandbox Code Playgroud)
我\在每个:冒号字符之前添加了一个反斜杠字符,因为根据bash信息页面,后者将每个(扩展的)shell glob,即模式与另一个分开。不转义单个模式没有任何效果,一个简单的命令仍然使它成为历史。
你的模式很复杂。否定正则表达式往往在正则表达式的大小上具有指数行为,并且在否定中存在否定,这可能导致双指数。乌尔普。
尽管如此,如此长时间的冻结是不可取的。我在 Debian 上使用 bash 4.2.37 在 Debian 上观察到相同的行为,因此将其报告为上游错误。但是要准备好被告知,要使这种边缘情况有效,工作量太大而收益太少。
同时,我怀疑该模式是否真的符合您的要求。有一种更简单的方法可以忽略单字命令:
HISTIGNORE='+([a-z])'
Run Code Online (Sandbox Code Playgroud)
如果您想忽略名称中包含其他字符的罕见命令,或者您想忽略空格,请调整此项。例如:
HISTIGNORE=$'*([\t ])+([-%+,./0-9\:@A-Z_a-z])*([\t ])'
Run Code Online (Sandbox Code Playgroud)
请注意,您不需要也确实不应该 export HISTIGNORE。这是一个 bash 内部变量,而不是一个环境变量。
| 归档时间: |
|
| 查看次数: |
1553 次 |
| 最近记录: |