Где команда cd настроена на cd $ HOME, когда путь не указан?

Следующие команды делают то же самое

  • $ cd
  • $ cd $HOME
  • $ cd ~
  • $ cd /home/user

В трех из них путь относительно определен. Но как и почему на земле простой cd открывает домашний каталог пользователя?

Это документированное поведение в стандарте POSIX :

  1. Если никакой операнд каталога не задан, а переменная среды HOME установлена ​​на непустое значение, утилита cd должна вести себя так, как если бы каталог, указанный в переменной среды HOME, был указан как операнд каталога.

Эта функция исходит от оболочки Bourne, которая была представлена ​​в версии 7 Unix в 1979 году. В этой системе HOME был задокументирован как «Аргумент по умолчанию (домашний каталог) для команды cd » . Предшественник оболочки Bourne (оболочка Thompson только что напечатала сообщение об ошибке, если вы использовали chdir без аргументов (оболочка Bourne также сократила имя команды до cd ).

У меня нет авторитетного источника для выбора этого, но почему бы и нет? cd без аргументов ничего полезного не делал, а домашний каталог – это тот, к которому пользователи часто должны вернуться. Синтаксис ~ еще не существовал, поэтому cd был ярлыком для cd $HOME .

Linux-системы обычно не имеют man-страниц для команд, которые доступны только как встроенные оболочки . Они задокументированы в руководстве каждой оболочки.