Разница между исполняемым и ./executable

В некоторых случаях мне нужно использовать ./executable вместо простого executable при запуске файла в bash. В чем разница, и как мне узнать, какой из них мне следует использовать?

Например, у меня есть исполняемый файл adb в папке DEV/ADT/sdk/platform-tools.

В bash, если я ввожу adb и запускаю его, я получаю ошибку: The program 'adb' is currently not installed. You can install it by typing: apt-get install android-tools-adb

Но если я набираю ./adb, это работает отлично.

1
задан 12 July 2014 в 22:50

2 ответа

Первый ключевой пункт - это ./ указывает текущий или рабочий каталог, то есть, каталог, в котором Вы находитесь теперь, который является также тем, который Вы видите, вводите ли Вы команду pwd (печать рабочий каталог). При мысли об этом удар работает два пути:

  • Если Вы указываете пустой исполняемый файл, такой adb где никакой каталог не дан, затем колотите поиски вдоль каталогов, перечисленных в системном ПУТИ для исполняемого файла того имени, и выполняет первое такой исполняемый файл, который оно находит.

    Видеть, какие каталоги находятся в системном ПУТИ, выполненном

    echo $PATH
    
  • Если Вы указываете исполняемый файл с каталогом, такой как ./ в Вашем случае затем колотите, только ищет исполняемый файл в том каталоге. Если это не там, это останавливается с ошибкой.

В Вашем случае Вы были в DEV/ADT/sdk/platform-tools папка, где исполняемый файл, adb, был расположен. Так, когда Вы вводите ./adb, удар ищет adb в текущем каталоге и, если это находит его, это выполняет его.

С другой стороны, когда Вы вводите adb, удар просматривает каталоги в ПУТИ. С тех пор DEV/ADT/sdk/platform-tools находится, по-видимому, не в ПУТИ, это не находит исполняемый файл и жалуется.

Часто, люди избегают этой проблемы путем помещения текущего каталога в их ПУТЬ через что-то как:

PATH="$PATH:."

После того, как это сделано, когда Вы вводите имя пустого исполняемого файла, такой как adb, удар будет искать его, как прежде, вдоль ПУТИ. Но так как ПУТЬ теперь включает текущий каталог, это посмотрит там также.

Добавление . к ПУТИ обычно делается для индивидуальных пользователей. Поскольку более опасно, когда корень случайно выполняет неправильный исполняемый файл, это обычно не делается для корня.

1
ответ дан 12 July 2014 в 22:50

Причина - это, если Вы не начинаете ее с ./, это будет искать PATH для executable - Вы видите свой ток PATH путем выполнения echo $PATH - пример произвел:

/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/wilf/.local/bin:/usr/games

Таким образом, если Вы хотите добавить DEV/ADT/sdk/platform-tools к Вашему ПУТИ включите следующее ~/.bash_profile (Вы, возможно, должны работать source ~/.bash_profile во-первых, или выход из системы и вход в систему):

PATH=$PATH:DEV/ADT/sdk/platform-tools

Другой пример для ~/.local/bin:

PATH=$PATH:$HOME/.local/bin

Если Вы снабжаете префиксом его ./ , это будет искать текущий рабочий каталог (можно найти это с echo $PWD, pwd, и т.д.) для файла.

1
ответ дан 12 July 2014 в 22:50

Другие вопросы по тегам:

Похожие вопросы: