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

25

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

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

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

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

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

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

MEM
источник
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, посмотрите соответствующий вопрос:

Lekensteyn
источник
3

Это значит начать с current directory path.

Предположим, у вас есть что-то pathвроде этого:

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

и внутри /usr/bin/есть исполняемый файл с именем yiic.

Если вы выпустите yiicего, начнется тот в /usr/bin/.

При выдаче ./yiicвы говорите системе искать в текущем каталоге этот исполняемый файл.

Rinzwind
источник
Хорошо ... но я все еще не понимаю. Допустим, у меня есть yiic внутри, /home/mysuser/и что я перемещаюсь там с помощью cd /home/myuser. Оказавшись внутри, я поверил, что делать просто yiic, это должно сработать, потому что я звонил в тот каталог. Но он говорит, что команда не файл. Если я делаю то же самое и использую ./, тогда он работает правильно ... Не могли бы вы уточнить немного больше?
MEM
@frabjous as также ответил на этот комментарий.
MEM
Нет! он всегда будет смотреть в директиву PATH, если вы не скажете ему использовать текущий каталог (с помощью ./). Посмотрите на ответ user45: .это специальный файл внутри папки, который вы можете видеть, когда делаете ls -laв каталоге;)
Rinzwind