2014-12-20 3 views
1

Если я нахожусь в каталоге foo, который содержит исполняемый bar, почему набрав bar результаты вЗапуск исполняемого файла Unix из командной строки

бар: команда не найдена

тогда набрав ./bar работает?

+1

Возможный дубликат [Почему вам нужно ./ (точка-косая черта) перед именем скрипта, чтобы запустить его в bash?] (Http://stackoverflow.com/questions/6331075/why-do-you-need-dot -slash-Before-скрипт-имя-бежать-он-в-Баш) – fejese

ответ

4

Поскольку по умолчанию * nix $ PATH не включает текущий каталог. Верьте или нет, это хорошая вещь:

Why do you need ./ (dot-slash) before script name to run it in bash?

Linux doesn't automatically add current directory to PATH

Нет, это не сделано, чтобы быть "раздражает". Это безопасная практика. Imaging вы пишете сценарий и называете его «ls», затем сохраните его в папке , где у вас есть доступ, скажем,/tmp. Теперь, если вы получите своего администратора до , запустите «ls» в/tmp с правами root и получите «.». в PATH, который запустит ваш скрипт вместо запуска реального «ls». Таким образом, вы можете сделать неприятный трюк. Вот почему "." не входит в вашу ПУТЬ. Теперь, если вам не требуется , вам потребуется такая защита, а затем измените свой PATH.

Нет ничего, что помешает вам изменить вашу $ PATH. В Linux «.bashrc» в вашем домашнем каталоге - хорошее место. Если вы добавите «.», Вы должны добавить его в END вашего $ PATH, а не в начало.

2

В вашем примере «бар» не работает, потому что «./» не находится в переменной среды PATH. Вы можете проверить это, набрав

echo $PATH 
2

Потому что, в отличие от окон, текущий каталог не в $PATH. Таким образом, ваша оболочка не будет пытаться искать имя команды bar в текущей папке, если вы не скажете ей посмотреть там.

Смежные вопросы