./ по сравнению с обычным выполнением

Вероятно, это вопрос больше для Unix-систем, но, поскольку он у меня есть на Mac Pro, я надеюсь, что найду ответ здесь:

Когда я просматриваю/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/db/bin

с компакт-диском я не могу выполнить команду startNetworkServer, присутствующую в bin, вместо этого я могу запустить ее через ./startNetworkServer.

Однако из~

MacCris:~ cris$ /Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/db/bin/startNetworkServer

работает без ./

Любая идея, почему? (связанные с правами?)

Спасибо

Ответы (2)

Это связано с поведением вашей оболочки, которая работает там Terminal.app. Это, вероятно, оболочка bash

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

  • ~= домашняя папка больше ничего.

  • ./somethingвыполнит это что-то (будь то скрипт или двоичный файл).
    Запись полного пути аналогична выполнению с./

  • cdэто каталог смены, поэтому он не будет выполняться

Это все стандартные команды командной строки unix/linux.

Ссылки:
http://linuxcommand.org/learning_the_shell.php http://www.arachnoid.com/linux/shell_programming.html

Спасибо... но дело не в том, что я не знаю эти команды (базовые), а в том, что поведение отличается, когда я пытаюсь выполнить через полный путь или когда я нахожусь в этом каталоге