编译后的命令行程序是否有办法告诉 bash 或 csh,它不希望在其参数中扩展任何通配符?例如,可能需要像这样的 shell 命令...
编译后的命令行程序有没有什么办法可以告诉 bash 或 csh,它不希望在其参数中扩展任何通配符?
例如,可能需要如下 shell 命令:
foo *
仅返回该字符的数字 ASCII 值。
虽然命令本身无法关闭通配符,但用户可以告诉 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