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
.