虽然命令本身无法关闭通配符,但用户可以告诉 Unix shell 不要通配特定命令。这通常通过编辑 shell 的配置文件来实现。假设可以 foo
在命令路径中找到该命令,则需要将以下内容添加到相应的配置文件中:
对于 sh、bash 和 ksh shell:
alias foo='set -f;foo';foo(){ command foo "$@";set +f;}
对于 csh 和 tcsh shell:
alias foo 'set noglob;\foo \!*;unset noglob'
对于 zsh shell:
alias foo='noglob foo'
命令路径不必使用。假设命令 foo 存储在目录 ~/bin 中,则上述内容将变为:
对于 sh、bash 和 ksh shell:
alias foo='set -f;foo';foo(){ ~/bin/foo "$@";set +f;}
对于 csh 和 tcsh shell:
alias foo 'set noglob;$home/bin/foo \!*;unset noglob'
对于 zsh shell:
alias foo='noglob ~/bin/foo'
以上所有内容均使用 Apple 的 OSX 10.9.2 进行测试。注意:复制上述代码时,请小心删除任何空格。它们可能很重要。
更新:
用户 geira 指出,在 bash shell 中
alias foo='set -f;foo';foo(){ ~/bin/foo "$@";set +f;}
可以替换为
reset_expansion(){ CMD="$1";shift;$CMD "$@";set +f;}
alias foo='set -f;reset_expansion ~/bin/foo'
这就消除了对函数 foo 的需要。
用于创建此文档的一些网站:
-
p13
-
p14
-
第15页
-
p16
-
p17
-
p18
-
第19页
-
p20
-
p21
-
第22页
-
p23