Вероятно, это вопрос больше для 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
работает без ./
Любая идея, почему? (связанные с правами?)
Спасибо
Это связано с поведением вашей оболочки, которая работает там Terminal.app. Это, вероятно, оболочка bash
Когда вы просите оболочку запустить команду, если вы указываете абсолютный путь (который начинается с /
вашего второго), он попытается выполнить эту программу по этому пути. Если вы укажете относительный путь (то есть тот, который не начинается с /
), он попытается создать абсолютный путь, добавив каталоги, которые находятся в вашей переменной среды PATH, к тому, что вы набрали. Поскольку ваш текущий каталог или .
он не находится в вашем PATH, он не может найти файл для выполнения. Если путь начинается с символа , .
он будет переназначен по абсолютному пути вашего текущего каталога и, таким образом, получит путь, который может быть выполнен.
~
= домашняя папка больше ничего.
./something
выполнит это что-то (будь то скрипт или двоичный файл).
Запись полного пути аналогична выполнению с./
cd
это каталог смены, поэтому он не будет выполняться
Это все стандартные команды командной строки unix/linux.
Ссылки:
http://linuxcommand.org/learning_the_shell.php http://www.arachnoid.com/linux/shell_programming.html
Крис