
Eu estava brincando em um shell 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 consigo encontrar nada online. Alguém pode me explicar isso?
Responder1
É provável que uma definição geral para isso não seja encontrada no manual do Bash, masa especificação POSIX(seção Resolução de nome de caminho):
O ponto especial do nome do arquivo deve se referir ao diretório especificado por seu antecessor.
Bem, qual é o antecessor se tivermos apenas .
? Enfatizei a parte importante:
Se o nome do caminho não começar com uma barra, o antecessor do primeiro nome de arquivo do nome do caminho será consideradoo diretório de trabalho atualdo processo
Também,
Um nome de caminho que contém pelo menos um caractere diferente de barra e que termina com uma ou mais barras finais deve ser resolvido como se um único caractere de ponto ( '.' ) fosse anexado ao nome do caminho
Então, quando você digita, ./
ele é resolvido como ./.
, 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 caracteres até o primeiro espaço em branco.)
Não há nenhum comando ou arquivo executável chamado ./.
, então ele falhará e informará que ./
"é um diretório". Interessantemente,.
éum comando (é um builtin também encontrado como source
), então quando você digitar .
você obterá: bash: .: filename argument required
.
Responder2
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, o que obviamente falhou, e o bash lhe deu a mensagem (parafraseada): "Não posso fazer isso. ./
É um diretório e eu não é possível executar diretórios como comandos."
Responder3
Isso .
implica o diretório atual. Você usa ./
como prefixo para qualquer arquivo no diretório atual.
Da mesma forma, ..
implica o diretório anterior (superior). É frequentemente usado quando se vai para um diretório de nível superior, por exemplocd ../../../
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 diretor de terceiro nível (baz) e executar ls
, verá qux
. Se você executar ls .
, obterá a mesma saída, assim como se executar ls ./
.
Se você está no terceiro nível de diretor (baz), e você corre ls ..
e ls ../
ambos te dão baz
. Ou seja, o conteúdo do diretório está um nível acima.
Responder4
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 de -a porque . representa um diretório oculto)