Когда вы используете команду
ls
, как shell находит соответствующий выполняемый файл (программу)
для ls
? На самом деле в большинстве систем ls
находится
в /bin/ls
. shell использует переменную среды PATH
("ТРОПА") для указания возможного местоположения выполняемых файлов соответствующих
команд.
Например, ваша переменнаяPATH
может иметь значение
/bin:/usr/bin:/usr/local/bin:.
Это список каталогов (в
которых shell будет искать команду), отделяемых друг от друга двоеточием ``:
''.
Когда вы используете команду ls
, shell
прежде всего
проверяет наличие /bin/ls
, затем /usr/bin/ls
и т.д.
Обратите внимание на то,
что переменная PATH
не помогает находить обычные файлы. Например,
если вы используете команду
/home/larry# cp foo bar
shell не использует PATH
для нахождения местопребывания файлов foo
и bar
-
предполагается, что эти имена однозначно определяют место. shell использует
PATH
только для нахождения команды cp.
Это экономит вам массу времени;
это означает, что вы не обязаны помнить, где находятся выполняемые файлы команд.
Во многих системах выполняемые файлы разбросаны во многих местах, таких как
/usr/bin
, /bin
или /usr/local/bin
. Вместо
того, чтобы писать полное имя команды (вроде /usr/bin/cp
), вы просто
указываете в PATH
перечень каталогов, которые бы вы хотели, чтобы
shell автоматически просматривал.
Обратите внимание, что PATH
содержит ``.
'', что означает "текущий рабочий каталог". Это позволяет
вам создавать shell-сценарии или программы и выполнять их как команды из текущего
каталога, без необходимости указывать это прямо (как в случае ./makebook
).
Если каталог не указан в PATH
, то shell не будет его просматривать
в поиске команд, это касается и текущего каталога.