Например, я установил java и могу просто запустить java ...
но если я, например, создаю скрипт оболочки, мне нужно запустить ./script.sh
.
Почему это? Что означает ./
?
Если исполняемый файл отсутствует в переменной PATH, необходимо явно указать путь. ./
является "относительным" указателем пути: «начиная с этого момента (.
) идти" не дальше "(/
). Если вы добавите текущий каталог в переменную среды PATH и введете команду rehash
, она вам больше не понадобится.
Когда вы запускаете команду, оболочка ищет переменную PATH
(или некоторую хеш-таблицу, в зависимости от оболочки #), где найти исполняемый файл. Но обычно текущий рабочий каталог (.
) Не включается. Итак, вам нужно указать оболочке, где найти ваш сценарий, добавив ./
как объяснил Флорис.
Цель этого параметра по умолчанию состоит в том, что вы спасаетесь от случайного выполнения скрипта (в текущем каталоге) с именем, например, rm
вместо ожидаемой команды в /bin
. Это особенно важно для root, потому что локальный скрипт может вести себя совершенно иначе, как вы и ожидаете!
# В этом ответе я написал немного больше о хеш-таблицах.
Текущий каталог не является стандартным в PATH, поэтому команды не будут искать из текущего каталога по умолчанию
java
находится в вашей $PATH
, поэтому она найдена и выполнена. ./
указывает командной строке использовать файл в вашем текущем каталоге, который обычно отсутствует в PATH.