3

Например, я установил java и могу просто запустить java ... но если я, например, создаю скрипт оболочки, мне нужно запустить ./script.sh .

Почему это? Что означает ./ ?

4 ответа4

9

Если исполняемый файл отсутствует в переменной PATH, необходимо явно указать путь. ./ является "относительным" указателем пути: «начиная с этого момента (.) идти" не дальше "(/). Если вы добавите текущий каталог в переменную среды PATH и введете команду rehash , она вам больше не понадобится.

3

Когда вы запускаете команду, оболочка ищет переменную PATH (или некоторую хеш-таблицу, в зависимости от оболочки #), где найти исполняемый файл. Но обычно текущий рабочий каталог (.) Не включается. Итак, вам нужно указать оболочке, где найти ваш сценарий, добавив ./ как объяснил Флорис.

Цель этого параметра по умолчанию состоит в том, что вы спасаетесь от случайного выполнения скрипта (в текущем каталоге) с именем, например, rm вместо ожидаемой команды в /bin . Это особенно важно для root, потому что локальный скрипт может вести себя совершенно иначе, как вы и ожидаете!


# В этом ответе я написал немного больше о хеш-таблицах.

1

Текущий каталог не является стандартным в PATH, поэтому команды не будут искать из текущего каталога по умолчанию

1

java находится в вашей $PATH , поэтому она найдена и выполнена. ./ указывает командной строке использовать файл в вашем текущем каталоге, который обычно отсутствует в PATH.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .