Чому мені потрібно ./ для виконання команд на Mountain Lion? [дублювати]


3

Можливі дублікати:
Що означає "/", "./", "../", що вказують на шляху?

Навіщо мені це потрібно ./ для запуску команд на Mountain Lion?

Наприклад, при використанні mysql я повинен вводити термінал:

./mysql -u itsme -p

Крім того, я створюю програми командного рядка і роблю файли виконуваними, і мені потрібно запускати команду з ./, подобається це...

./myawesomeapp dothis

я знаю ./ означає поточний каталог, але як я можу запускати команди, не використовуючи його?


1
@cdhowie Це питання програмування, якщо воно виникає при побудові виконуваного файлу в командному рядку.
Potatoswatter

1
@Potatoswatter Ні, це не так. Це недосконала логіка. Я міг би використовувати той самий аргумент, щоб стверджувати, що майже будь-яка тема, пов'язана з комп'ютером, знаходиться на темі на SO.
cdhowie

Відповіді:


6

Якщо ви помістіть каталог з вашими виконуваними файлами PATH змінної середовища, ви можете викликати їх без надання шляху (тобто ./ )

Я думаю, ви, напевно, використовуєте bash як оболонку (ви можете перевірити, запустивши echo $SHELL ). Якщо це так, додайте наступне до свого .bashrc

export PATH=$PATH:/whatever/path/you/want/to/add

3

Ви повинні встановити виконуваний файл в одному з каталогів, перелічених у змінній середовища $PATH.

echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin

Налаштувати $PATH шляхом зміни вашого ~/.profile файл.

export PATH=$PATH:/Users/me/bin

Можна відмовитися від ./ завжди додаючи . до $PATH, але це може бути проблема безпеки - якщо не на вашій персональній машині, то коли ви несете погану звичку під час роботи сервера.


1

Поки можна додати . до вашої змінної $ PATH, рекомендується НЕ робити це. Якщо ви ходите до певного місця у файловій системі і вводите щось, що, на вашу думку, запускатиме програму ( vi, emacs, ls, psі т.д.), файл у локальному каталозі стане кандидатом для запуску. Якщо вам не пощастило, це НЕ програма, яку ви хотіли б працювати взагалі - і якщо ви працюєте як rootЦе ще гірше, тому що хтось може додати локальний файл ls що робить щось зовсім інше, ніж реальне ls (поряд з виконанням реальних ls, звичайно - інакше було б очевидно, що це не справжні ls, а користувач почав би досліджувати ситуацію). [1]

Замість цього вам слід додати абсолютний шлях до місця виконання виконуваних файлів, наприклад, /projects/mycurrentprojects/bin - або "по відношенню до дому", напр. ~/bin - Якщо ви хочете, щоб шлях до роботи в усіх обставинах краще використовувати home\mats\bin [очевидно, використовуючи правильне ім'я користувача]. Таким чином, застосовні лише файли в безлічі каталогів, і незалежно від того, де ви знаходитесь, тільки "програми, які знаходяться в цих специфічних каталогах, вибираються як" можливі кандидати для запуску ".

[1] Так, я розумію, що порядок пошуку та інші чинники також будуть мати значення тут. Але, як правило, не варто додавати "поточний каталог", незалежно від того, які заперечення.


Тильда ~ може не завжди розширюватися, викликаючи розчарування. Її заміщення здійснюється програмами оболонки, в той час як різні види середовищ можуть використовуватись PATH.
Potatoswatter

Влучне зауваження. Тому може бути краще виписати /home/mats/bin - редагування ...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.