Я случайно сбросил $PATH. Почему 'эхо' все еще работало?

Таким образом, там я был. Попытка добавить к $PATH. Мм, о! Я случайно сбросил $PATH! По любой причине я работал

$ ls
bash: ls: command not found

Ожидаться. Затем я работал

$ echo $PATH
$PATH:/home/jon/.local/bin

echo своего рода особый случай? Почему это не находится на $PATH? Это встроено для избиения?

21
задан 5 February 2020 в 03:09

3 ответа

echo встроенный удар. Это не использует $PATH найти echo программа, вместо этого колотите, имеет свою собственную версию echo который используется вместо echo программа, расположенная в Вашем $PATH

читайте больше здесь: Bash Builtins (Справочник Bash)

60
ответ дан 20 February 2020 в 23:01

В дополнение к тому, что упомянул Minijack, можно проверить то, что команда при помощи type встроенный.

$ type echo
echo is a shell builtin

С другой стороны, which может использоваться для проверки на исполняемые файлы конкретно. После того как Вы сбрасываете $PATH, Вы получите что-то как

$ which echo
/usr/bin/which: no echo in ((null))

Принимая во внимание, что с Вашим путем устанавливает Вас, добираются

/usr/bin/echo

Можно проверить man builtins для списка и desription различного builtins. Например, [ и test также builtins.

Править: which работы для меня даже без ПУТИ из-за псевдонима, который использует полный путь

25
ответ дан 20 February 2020 в 23:01

Модель, используемая Единственной Спецификацией Unix (иначе IEEE 1003.1), - то, что, встроена ли команда в оболочку, простая оптимизация, и поведение (если вызвано совместимым способом) должно быть тем же для встроенной версии команды что касается внешней версии. (Это регулярное созданный-ins, который является. Особенный созданный-ins другой вопрос.), В частности, если команда не найдена как внешнее в a PATH поиск, встроенная версия не должна быть выполнена.

Это действительно, что происходит с одной оболочкой. Вы найдете, что оболочка Watanabe соответствует SUS. В posixly-correct режим, если echo не находится на пути, встроенном echo команда в оболочке Watanabe не будет выполняться.

Но 93 Korn, Debian Almquist, Z, и Граница Снова окружают в их большинстве совместимых режимов все еще, все выполняются созданный-ins, даже если нет никакого соответствующего исполняемого файла на PATH. Именно это происходит здесь для Вас. Граница Снова окружает, имеет встроенное echo команда и несколько других, кроме того. Это выполняет это, даже при том, что это не нашло внешнее echo команда в a PATH поиск.

(Обратите внимание, что существует довольно много способов вызвать echo несовместимым способом, или по крайней мере способом, где результат является неуказанным: Используя -n; использование обратной косой черты в любом аргументе; использование -e; использование других вещей, ожидающих, что они будут опциями команды или концом маркеров опций. Они не только показывают, является ли это встроенным echo, но даже до степени показывают, какая оболочка используется. К счастью, Вы не поражали ни одного из них. ☺)

Дальнейшее чтение

3
ответ дан 20 February 2020 в 23:01

Другие вопросы по тегам:

Похожие вопросы: