[1187447] Встроенные команды всегда предпочтительнее внешних команд. Это объясняется тем, что встроенная команда работает быстрее (а в некоторых случаях, например, [1187839]cd[1187840] или [1187841]test -o [1187925]BASH_OPTION[12157], только встроенная команда может иметь желаемый эффект).[12158]Иногда внешняя команда может иметь возможности, которых нет у встроенной команды оболочки. В таком случае, вы можете вызвать внешнюю команду, указав явный путь (т.е. содержащий косой черту) (это позволяет обойти любое беспокойство по поводу порядка в [1187843]$PATH[1187844]). Если вы не хотите жестко кодировать внешний путь, но хотите предотвратить использование сборки, вы можете использовать [1187845] "$(type -P test)"[1187846] (обратите внимание на заглавную [1187847]P[1187848]) в bash, [1187849] "$(whence -p test)"[1187850] в ksh, и [1187851]=test[1187852] в zsh.
Другой способ заставить использовать внешнюю команду - это использовать [1187853] команду [1187854] builtin ([1187855] command -p test ...[1187856]) или пройти через утилиту [1187857]env[1187858] ([1187859]env test ...[1187860]).[12159]В zsh, вы можете отключить builtin с помощью [1187861]disable test[1187862]. Эта функция является постоянной (для текущей оболочки или подоболочки) до тех пор, пока встроенный модуль не будет повторно включен с помощью теста [1187863] enable test[1187864]. В bash, вы можете сделать то же самое с включением [1187865]-n test[1187866], чтобы отключить и [1187867]-включением теста[1187868].[12160]Вы можете использовать псевдоним или функцию, чтобы принудительно выполнить другую команду, например [1187869]псевдоним test=/usr/bin/test[1187870] или [1187871]test () { /usr/bin/test "$@"; }[1187872]. Если у вас есть такой псевдоним, вы можете предотвратить его использование, процитировав любую его часть, например, [1187873]\test[1187874] выполнит обычный поиск функции/сборки/внешний поиск. Обратите внимание, что в зависимости от оболочки и ее настроек, определения псевдонимов в функции могут быть расширены при чтении функции или при ее выполнении. Если вы определили функцию, вы можете использовать [1187875]command test[1187876] для предотвращения поиска функции, а также поиска псевдонимов (поэтому здесь будет вызвана сборка [1187877]test[1187878], если она не будет отключена).[1187454].
27.01.2020, 19:50
Ссылка