Яке значення ./ перед заданим шляхом?


25

Мені сказали виконати це:

./yiic message ./app/messages/config.php

Але я не розумію ./сенсу, може хтось уточнить, будь ласка.

Примітка. Повірте, ми не можемо це гугл. Я спробував:

./ значення ./ ubuntu

Це було те саме, що нічого. :(


3
У цих випадках найкраще шукати " красну
heltonbiker

Відповіді:


29

./або просто .це скорочення для Unix для поточного каталогу.

Потрібно вказати його, коли поточний каталог не знаходиться у вашій PATH. PATH - це список папок, які шукаються під час запуску програми. (Ви можете визначити це, записавши echo $PATH.) Якщо виконуваного файлу немає у вашому PATH, для його запуску потрібно вказати папку, в якій він знаходиться. Ви можете зробити це, надавши повний шлях до файлу, але якщо файл знаходиться у поточний каталог, який ви можете використовувати ./як стенограму.

Аналогічно, ../або просто ..це скорочення для каталогу вище поточного.


17
Хтось повинен включити у свою відповідь, чому $ PATH не містить .. Це тому, що автоматично за допомогою поточного каталогу є отвір для захисту. Уявіть, що хтось інший робить програму, називає її lsта ви cdу своєму каталозі, а потім наберітьls
Zan Lynx

1
@Zan Я завжди це цікавив, дякую за вашу відповідь на питання, яке ніхто не задавав, але хтось повинен.
катастрофа

@ZanLynx чудовий коментар / додаток, його слід відредагувати у відповідь, оскільки коментарі можуть загубитися.
NSGaga

15

Кожен каталог у командному рядку має два "спеціальні каталоги", що називаються .та ... Це скорочення відповідно до поточного каталогу та до каталогу, що містить поточний каталог.

Так, наприклад, cd ./more/directory/namesпросто означає "почати з поточного каталогу і продовжувати шлях". Аналогічно команда cd ..означає "змінити один каталог вгору.

Якщо ви хочете назву поточного каталогу, ви можете скористатися pwdкомандою. Крім того, якщо ви використовуєте -aпрапор для ls, ви можете побачити ці два спеціальні каталоги. Тобто ls -aвиведе список, починаючи з .і ...


відмінне додавання root45 +1 :)
Rinzwind

4

Інші вже пояснили, що .і що ..означає (поточний каталог і батьківський каталог відповідно). Це стосується всіх імен шляхів.

Відкриваючи термінал, ви зазвичай запускаєте у свій домашній каталог: ~(який розширюється до /home/username). Нижче наведені шляхи еквівалентні, якщо ваш поточний робочий каталог /home/username:

  • /home/username
  • .
  • ../username
  • ../../home/username
  • ../../../home/username(батьківський каталог /досі є /)
  • ./././././. (поточний каталог у поточному каталозі у ...)
  • ./ (кінцеві косої риски дозволені для каталогів)
  • /home////username/// (і так є декілька косої риски)

Ви НЕ плутайте ./programз . program. ./programзапускає файл у поточному каталозі з набором бітів виконання. . ./programє баш-річчю і може бути записаний так, source ./programщо читає команди bash з programфайлу в поточному каталозі та виконує їх у поточній оболонці.

Якщо вам цікаво , чому ви можете просто запустити geditзамість , /usr/bin/geditа не programзамість ./programабо /home/username/program, побачити пов'язаний з цим питання:


3

Це означає починати з current directory path.

Припустимо, у вас pathтаке:

/usr/ /usr/bin/ /usr/local/bin

а всередині /usr/bin/є виконаний файл, який називається yiic.

Якщо ви опублікуєте, yiicце розпочнеться в /usr/bin/.

Випускаючи, ./yiicви скажете системі заглянути в поточний каталог для цього виконуваного файлу.


Гаразд ... але я все ще не отримую. Скажімо, у мене є йоїк всередині, /home/mysuser/і я переходжу туди за допомогою cd /home/myuser. Потрапивши всередину, я вважав, що робити просто ємік, це має працювати, тому що я зателефонував у той каталог. Але він каже, що команда не подавати. Якщо я роблю те саме, і я використовую ./, він працює належним чином ... Чи можете ви уточнити трохи більше?
MEM

@frabjous також відповів на цей коментар.
MEM

Ні! вона завжди буде шукати директиву PATH, якщо ви не скажете їй використовувати поточний каталог (за допомогою ./). Подивіться на відповідь user45: .це спеціальний файл всередині папки, який ви можете бачити під час роботи ls -laв каталозі;)
Rinzwind
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.