O que é ./ in BASH

3

Eu estava brincando em uma concha e digitei ./. Eu vou a seguinte saída:

bash: ./: Is a directory

Parece que "./" verifica se existe um diretório com o nome fornecido. Eu estava tentando encontrar documentação sobre isso para ver se meu entendimento estava correto, mas não encontrei nada on-line. Alguém pode me explicar isso?

    
por Andi Jay 08.12.2013 / 20:45

4 respostas

8

Uma definição geral para isso provavelmente não é encontrada no manual do Bash, mas o POSIX especificação (seção Resolução do nome do caminho):

The special filename dot shall refer to the directory specified by its predecessor.

Bem, qual é o predecessor se tivermos apenas . ? Eu enfatizei a parte importante:

If the pathname does not begin with a slash, the predecessor of the first filename of the pathname shall be taken to be the current working directory of the process

Além disso,

A pathname that contains at least one non-slash character and that ends with one or more trailing slashes shall be resolved as if a single dot character ( '.' ) were appended to the pathname

Assim, quando você digita ./ , ele é resolvido como ./. , o que basicamente aponta para o seu diretório de trabalho atual. Quando você digita algo em seu shell e pressiona Enter , o shell tentará executar a primeira parte como um comando. (Basicamente, o primeiro grupo de personagens até o primeiro espaço em branco).

Não há nenhum comando ou arquivo executável chamado ./. , portanto ele falhará e informará que ./ "é um diretório". Curiosamente, . é um comando (é um builtin também encontrado como source ), então quando você digitar apenas . você obterá: bash: .: filename argument required .

    
por 08.12.2013 / 21:22
3

Como outros escreveram, ./ é o nome do diretório atual. Quando você digitou ./ no prompt do bash e pressionou Enter, você tentou executar o diretório atual como um comando, que obviamente falhou, e o bash lhe deu a mensagem (parafraseada), "Eu não posso fazer isso. ./ é um diretório e não consigo executar diretórios como comandos. "

    
por 08.12.2013 / 21:17
2

O . implica no diretório atual. Você usa ./ como prefixo para quaisquer arquivos no diretório atual.

Da mesma forma, .. implica no diretório anterior (superior). É frequentemente utilizado quando se vai para um diretório de nível superior, por ex. cd ../../../

Dado um sistema de arquivos com o conteúdo:

# 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

Se você estiver no terceiro nível diretor (baz) e executar ls , verá qux . Se você executar ls . , obterá a mesma saída, além de executar ls ./ .

Se você estiver no terceiro nível diretor (baz), e você executar ls .. e ls ../ , ambos darão baz . Ou seja, o conteúdo do diretório um nível acima.

    
por 08.12.2013 / 21:03
1

No Linux ./ significa o diretório atual (e ../ refere-se ao diretório pai).

Se você fizer um ls -a, você verá. e .. listados como diretórios (você precisa do -a porque. representa um diretório oculto)

    
por 08.12.2013 / 20:52