Jakie jest znaczenie ./ przed daną ścieżką?

25

Kazano mi uruchomić to:

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

Ale nie rozumiem ./znaczenia, czy ktoś może wyjaśnić, proszę.

Uwaga: uwierz mi, nie możemy tego zrobić w Google. Próbowałem:

./ czyli ./ ubuntu

To było to samo, co nic. :(

MEM
źródło
3
W takich przypadkach najlepiej jest poszukać „kropkowanego ukośnika”, który dał bardzo użyteczny wynik: linfo.org/dot_slash.html
heltonbiker

Odpowiedzi:

29

./lub po prostu .jest skrótem unix dla bieżącego katalogu.

Musisz go podać, gdy bieżący katalog nie znajduje się w ŚCIEŻCE. ŚCIEŻKA jest listą folderów przeszukiwanych podczas uruchamiania programu. (Możesz to ustalić pisząc echo $PATH.) Jeśli plik wykonywalny nie znajduje się w ŚCIEŻCE, aby go uruchomić, musisz określić folder, w którym się on znajduje. Możesz to zrobić, podając pełną ścieżkę do pliku, ale jeśli plik jest w bieżący katalog, którego możesz użyć ./jako skrótu.

Podobnie, ../lub po prostu ..jest skrótem dla katalogu powyżej bieżącego.

frabjous
źródło
17
Ktoś powinien podać w swojej odpowiedzi, dlaczego $ PATH nie zawiera .. Jest tak, ponieważ automatyczne korzystanie z bieżącego katalogu jest luką w zabezpieczeniach. Wyobraź sobie, że ktoś inny tworzy program, nazwał go, lsa ty cddo jego katalogu, a następnie wpiszls
Zan Lynx
1
@Zan Zawsze się nad tym zastanawiałem, dziękuję za odpowiedź na pytanie, którego nikt nie zadał, ale ktoś powinien.
crasic
@ZanLynx świetny komentarz / dodatek, należy go edytować w odpowiedzi, ponieważ komentarze mogą się zgubić.
NSGaga,
15

Każdy katalog w wierszu poleceń ma wywołane dwa „katalogi specjalne” .i ... Są one skrótem odpowiednio dla bieżącego katalogu i katalogu zawierającego bieżący katalog.

Na przykład cd ./more/directory/namesoznacza po prostu: „zacznij od bieżącego katalogu i kontynuuj ścieżkę”. Podobnie polecenie cd ..oznacza „zmień jeden katalog w górę.

Jeśli chcesz nazwę bieżącego katalogu, możesz użyć pwdpolecenia. Ponadto, jeśli użyjesz -aflagi dla ls, możesz zobaczyć te dwa specjalne katalogi. Oznacza to, ls -aże wyświetli listę zaczynającą się od .i ...

Kris Harper
źródło
doskonały dodatek root45 +1 :)
Rinzwind
4

Inni już wyjaśnili co .i co ..oznacza (odpowiednio katalog bieżący i katalog nadrzędny). Dotyczy to wszystkich nazw ścieżek.

Kiedy otwierasz terminal, zwykle zaczynasz w swoim katalogu domowym: ~(który rozwija się do /home/username). Wszystkie poniższe ścieżki są równoważne, pod warunkiem, że bieżący katalog roboczy to /home/username:

  • /home/username
  • .
  • ../username
  • ../../home/username
  • ../../../home/username(katalog macierzysty /jest nadal /)
  • ./././././. (bieżący katalog w bieżącym katalogu w ...)
  • ./ (końcowe ukośniki są dozwolone dla katalogów)
  • /home////username/// (podobnie jak wiele ukośników)

Czy nie mylić ./programz . program. ./programuruchamia plik w bieżącym katalogu z ustawionym bitem wykonania. . ./programjest rzeczą bashową i można ją alternatywnie zapisać jako source ./programodczytywanie poleceń bash z programpliku w bieżącym katalogu i wykonywanie ich w bieżącej powłoce.

Jeśli zastanawiasz się, dlaczego możesz po prostu uruchomić geditzamiast, /usr/bin/gedita nie programzamiast ./programlub /home/username/program, zobacz powiązane pytanie:

Lekensteyn
źródło
3

Oznacza zacząć od current directory path.

Załóżmy, że masz coś pathtakiego:

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

a wewnątrz /usr/bin/znajduje się plik wykonywalny o nazwie yiic.

Jeśli wydasz yiic, uruchomi się ten w /usr/bin/.

Wydając polecenie ./yiic, każ systemowi zajrzeć do bieżącego katalogu tego pliku wykonywalnego.

Rinzwind
źródło
Ok ... ale wciąż nie rozumiem. Powiedzmy, że mam yiica w środku /home/mysuser/i nawiguję tam za pomocą cd /home/myuser. Będąc w środku, wierzyłem, że robienie tylko yiic powinno działać, ponieważ zadzwoniłem, gdy byłem w tym katalogu. Ale mówi, że polecenie nie archiwizuje. Jeśli zrobię to samo i użyję ./, to będzie działać poprawnie ... Czy możesz wyjaśnić trochę więcej?
MEM
@frabjous as również odpowiedział na ten komentarz.
MEM
Nie! zawsze będzie szukać w dyrektywie PATH, chyba że powiesz mu, aby używał bieżącego katalogu (używając ./). Spójrz na odpowiedź użytkownika45: .to specjalny plik w folderze, który możesz zobaczyć podczas robienia ls -law katalogu;)
Rinzwind