Embora seja verdade que um comando em si não pode desativar o globbing, é possível para um usuário dizer a um shell Unix para não globalizar um comando específico. Isso geralmente é feito editando os arquivos de configuração de um shell. Assumindo que o comando foo
pode ser encontrado ao longo do caminho do comando, o seguinte precisa ser adicionado ao arquivo de configuração apropriado:
Para os shells sh, bash e ksh:
alias foo='set -f;foo';foo(){ command foo "$@";set +f;}
Para os shells csh e tcsh:
alias foo 'set noglob;\foo \!*;unset noglob'
Para o shell zsh:
alias foo='noglob foo'
O caminho do comando não precisa ser usado. Digamos que o comando foo esteja armazenado no diretório ~ / bin, então o acima se tornaria:
Para os shells sh, bash e ksh:
alias foo='set -f;foo';foo(){ ~/bin/foo "$@";set +f;}
Para os shells csh e tcsh:
alias foo 'set noglob;$home/bin/foo \!*;unset noglob'
Para o shell zsh:
alias foo='noglob ~/bin/foo'
Todos os itens acima foram testados usando o OSX 10.9.2 da Apple. Nota: Ao copiar o código acima, tome cuidado ao excluir quaisquer espaços. Eles podem ser significativos.
Atualizar:
O usuário geira apontou que, no caso de um bash shell
alias foo='set -f;foo';foo(){ ~/bin/foo "$@";set +f;}
poderia ser substituído por
reset_expansion(){ CMD="$1";shift;$CMD "$@";set +f;}
alias foo='set -f;reset_expansion ~/bin/foo'
o que elimina a necessidade da função foo.
Alguns sites usados para criar este documento:
pwd
,echo *
é apenas*