3

Я играл в ракушке и печатал./. Я иду следующий вывод:

bash: ./: Is a directory

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

4 ответа4

8

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

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

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

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

Также,

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

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

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

3

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

2

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

Точно так же .. подразумевает предыдущий (более высокий) каталог. Он часто используется при переходе в каталог более высокого уровня, например, 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 . То есть содержимое каталога на один уровень выше.

1

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .