Uma definição geral para isso provavelmente não é encontrada no manual Bash, mas na especificação POSIX (seção Pathname Resolution):
O ponto especial do nome do arquivo deve se referir ao diretório especificado pelo seu predecessor.
Bem, o que é o antecessor, se tivermos apenas .
? Eu enfatizei a parte importante:
Se o nome do caminho não começar com uma barra, o predecessor do primeiro nome de arquivo do nome do caminho será considerado o diretório de trabalho atual do processo.
Além disso,
Um nome de caminho que contenha pelo menos um caractere não-slash e que termine com uma ou mais barras finais será resolvido como se um único caractere de ponto ('.') Fosse anexado ao nome do caminho.
Então, quando você digita ./
, é resolvido como ./.
, que basicamente aponta para o seu diretório de trabalho atual. Quando você digita algo em seu shell e acerta 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 ./.
, por isso ele falhará e informará que ./
"é um diretório". Curiosamente, .
é um comando (é um builtin também encontrado como source
), então quando você apenas digitar .
você vai ter: bash: .: filename argument required
.
./
é o mesmo que.
, que é o diretório atual. E não apenas no Linux ou apenas no shell bash.