Хотя верно, что команда сама по себе не может отключить подстановку подстановки, пользователь может указать оболочке Unix не подменять конкретную команду. Обычно это достигается путем редактирования файлов конфигурации оболочки. Предполагая, что команду foo
можно найти по пути к команде, в соответствующий файл конфигурации необходимо добавить следующее:
Для оболочек sh, bash и ksh:
alias foo='set -f;foo';foo(){ command foo "$@";set +f;}
Для оболочек csh и tcsh:
alias foo 'set noglob;\foo \!*;unset noglob'
Для оболочки zsh:
alias foo='noglob foo'
Путь к команде использовать не обязательно. Скажем, команда foo хранится в каталоге ~ / bin, тогда приведенное выше будет выглядеть так:
Для оболочек sh, bash и ksh:
alias foo='set -f;foo';foo(){ ~/bin/foo "$@";set +f;}
Для оболочек csh и tcsh:
alias foo 'set noglob;$home/bin/foo \!*;unset noglob'
Для оболочки zsh:
alias foo='noglob ~/bin/foo'
Все вышеперечисленное было протестировано с использованием Apple OSX 10.9.2. Примечание. При копировании приведенного выше кода будьте осторожны, не удаляя пробелы. Они могут быть значительными.
Обновить:
Пользователь Гейра указал, что в случае оболочки bash
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.
Некоторые веб-сайты, использованные для создания этого документа:
pwd
,echo *
это просто*