Что такое ./ в BASH

Что такое ./ в BASH

Я игрался в оболочке и набрал ./. Вывод получился следующий:

bash: ./: Is a directory

Похоже, что "./" проверяет, существует ли каталог с указанным именем. Я пытался найти документацию по этому вопросу, чтобы убедиться, что я правильно понял, но не могу найти ничего в сети. Может ли кто-нибудь объяснить мне это?

решение1

Общее определение этого термина, скорее всего, не будет найдено в руководстве Bash, носпецификация POSIX(раздел Разрешение имени пути):

Специальная точка в имени файла должна ссылаться на каталог, указанный его предшественником.

Ну, а что такое предшественник, если у нас есть только .? Я подчеркнул важную часть:

Если имя пути не начинается с косой черты, то предшественником первого имени файла в имени пути будет считатьсятекущий рабочий каталогпроцесса

Также,

Имя пути, которое содержит хотя бы один символ, отличный от косой черты, и заканчивается одним или несколькими завершающими слешами, должно быть разрешено так, как если бы к имени пути был добавлен один символ точки ('.').

Итак, когда вы вводите, ./он разрешается как ./., что в основном указывает на ваш текущий рабочий каталог. Когда вы вводите что-то в своей оболочке и нажимаете Enter, оболочка попытается выполнить первую часть как команду. (В основном первую группу символов до первого пробела.)

Нет команды или исполняемого файла с именем ./., поэтому он потерпит неудачу и сообщит вам, что ./«является каталогом». Интересно,. являетсякоманда (она встроенная, также встречается как source), поэтому, если вы просто введете ее, .то получите: bash: .: filename argument required.

решение2

Как писали другие, ./это имя текущего каталога. Когда вы набрали ./в приглашении bash и нажали Enter, вы попытались выполнить текущий каталог как команду, что, конечно, не удалось, и bash выдал вам сообщение (перефразированное): "Я не могу этого сделать. ./это каталог, а я не могу выполнять каталоги как команды".

решение3

Подразумевает .текущий каталог. Вы используете ./как префикс для любых файлов в текущем каталоге.

Аналогично, ..подразумевает предыдущий (вышестоящий) каталог. Часто используется при переходе в каталог более высокого уровня, напримерcd ../../../

Дана файловая система с содержимым:

# Comments start with a hash and aren't parsed
/                    # root directory
/foo/                # first level directory
/foo/bar/            # second level directory
/foo/bar/baz         # third level directory
/foo/bar/baz/qux     # a file in the third level directory

Если вы находитесь в директоре третьего уровня (baz) и запустите ls, вы увидите qux. Если вы запустите ls ., вы получите тот же вывод, что и если вы запустите ls ./.

Если вы находитесь в директории третьего уровня (baz), и вы запускаете ls ..и ls ../оба даете вам baz. То есть содержимое директории на один уровень выше.

решение4

В Linux ./ означает текущий каталог (а ../ относится к родительскому каталогу).

Если вы выполните команду ls -a, то увидите . и .. в списке каталогов (вам нужен параметр -a, поскольку . представляет скрытый каталог)

Связанный контент