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 .