Quando você executa o comando
$ ./hello2
o shell pesquisa o arquivo hello2
no diretório .
, ou seja, no diretório atual . Em seguida, ele executa o script ou o binário de acordo com algumas regras (que não são interessantes nesse contexto).
O comando
$ ././hello2
também faz com que o shell execute o arquivo.
Isso ocorre porque .
e ./.
é o mesmo diretório.
Todo diretório possui uma entrada de diretório .
. Esta entrada corresponde ao próprio diretório. Então, dizer ./
é o mesmo que dizer ././
e ././././
etc.
A única diferença é que o sistema pode ter que fazer algumas pesquisas de diretórios extras (a menos que o shell seja inteligente e identifique a simplificação óbvia).
Todo diretório também possui uma entrada ..
que aponta para seu diretório pai .
Isso significa que se o diretório atual for chamado alamin
, o seguinte também executaria o arquivo:
$ ../alamin/hello2
como seria
$ ../alamin/./hello2
e
$ .././alamin/./hello2
O diretório raiz, /
, é um caso especial. Sua entrada de diretório ..
é igual à entrada de diretório .
. Isso significa que você não pode ir "acima" com /..
.
Veja também: O número de links para uma pasta não reflete o status real?