В чем смысл ./ перед заданным путем?


25

Мне сказали запустить это:

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

Но я не понимаю ./смысла, может кто-нибудь уточнить, пожалуйста.

Примечание: поверьте мне, мы не можем гуглить это. Я пробовал:

./ Значение ./ Ubuntu

Это было так же, как ничего. :(


3
В этих случаях лучше всего искать «точечный слеш», который дал очень полезный результат: linfo.org/dot_slash.html
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это вещь bash и может быть записана так, 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вы говорите системе искать в текущем каталоге этот исполняемый файл.


Хорошо ... но я все еще не понимаю. Допустим, у меня есть yiic внутри, /home/mysuser/и что я перемещаюсь там с помощью cd /home/myuser. Оказавшись внутри, я поверил, что делать просто yiic, это должно сработать, потому что я звонил в тот каталог. Но он говорит, что команда не файл. Если я делаю то же самое и использую ./, тогда он работает правильно ... Не могли бы вы уточнить немного больше?
MEM

@frabjous as также ответил на этот комментарий.
MEM

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