Встроенные команды всегда предпочтительнее внешних команд. Смысл в том, что встроенная команда работает быстрее (и в некоторых случаях, например, cd
или , только встроенная команда может дать желаемый эффект).test -o BASH_OPTION
Иногда внешняя команда может иметь возможности, которых нет у встроенной оболочки. В этом случае вы можете вызвать внешнюю команду, указав явный путь (то есть, содержащий косую черту) (это обходит любые опасения по поводу порядка в $PATH
). Если вы не хотите жестко кодировать внешний путь, но хотите запретить использование встроенной функции, вы можете использовать "$(type -P test)"
(примечание заглавную P
) в bash, "$(whence -p test)"
в ksh и =test
в zsh. Другой способ принудительного использования внешней команды - использовать command
встроенный ( command -p test …
) или пройти через env
утилиту ( env test …
).
В zsh вы можете отключить встроенную функцию с помощью disable test
. Это постоянно (для текущей оболочки или подоболочки), пока встроенная функция не будет включена enable test
. В bash вы можете сделать то же самое с enable -n test
отключением и enable test
включением.
Вы можете использовать псевдоним или функцию для принудительного выполнения другой команды, например alias test=/usr/bin/test
или test () { /usr/bin/test "$@"; }
. Если у вас есть такой псевдоним, вы можете запретить его использование, заключив в кавычки любую его часть, например, \test
будет выполнять обычную функцию / встроенный / внешний поиск. Обратите внимание, что в зависимости от оболочки и ее настроек определения псевдонимов в функции могут быть расширены при чтении функции или при ее выполнении. Если вы определили функцию, вы можете использовать ее command test
для предотвращения поиска функций, а также поиска псевдонимов (поэтому здесь test
встроенная функция будет вызываться, если она не отключена).
/usr/bin/test -f "$file"
...