Como também ewhac apontou , o erro as mensagens diferem porque a última linha de comando contém barras ( /
), o que faz com que o seu shell interprete como um caminho de arquivo.
Ambos os erros são originários do seu shell, que neste caso é bash
(o que é evidente a partir da segunda mensagem de erro).
Mais especificamente, o primeiro erro se origina da função execute_disk_command()
definida em execute_command.c
no bash-4.2
código-fonte. A função execute_disk_command()
chama search_for_command()
definido em findcmd.c
, que, caso o pathname
especificado não contenha barras, pesquisa $PATH
para o pathname
. No caso de pathname
conter barras, search_for_command()
não executa essa pesquisa. Caso search_for_command()
não retorne um comando, execute_disk_command()
falhará com o erro interno command not found
.
O segundo erro se origina da função shell_execve()
, também definida em execute_command.c
. Neste ponto do seu cenário, search_for_command()
teria retornado com êxito porque não teria sido necessária nenhuma pesquisa e execute_disk_command()
chamou shell_execve()
, que, por sua vez, executa a chamada de sistema execve()
. Isso falha, porque o arquivo execve()
tenta executar não existe e execve()
indica isso configurando errno
apropriadamente. Quando execve()
falha, shell_execve()
usa strerror()
para relatar a mensagem de erro do arquivo correspondente ( No such file or directory
) e sai do shell imediatamente no erro.