Eu sei como *é interpretado em comandos como lspor exemplo. Mas ao tentar executar *como um comando, o shell tenta executar o primeiro arquivo ou diretório em seu diretório de trabalho. Por que é isso? Como o shell entende *?
Ao contrário de alguns outros sistemas operacionais, no Unixes, é o shell que expande os caracteres curinga do nome do arquivo. Ele expande as expansões de parâmetros e globs primeiro, depois usa a primeira palavra (agora) como o nome do comando a ser executado.
É também por isso que os arquivos nomeados com um traço inicial podem ser problemáticos: um glob como *se expandirá para os nomes dos arquivos, e um nome que comece com um traço pode ser escolhido como uma opção. (O exemplo assustador é que um arquivo chamado -rno diretório de trabalho faria rm *remover tudo recursivamente ...)
Normalmente, não se usaria *como o primeiro item em qualquer linha de comando, portanto, ter o primeiro arquivo determinando o comando a ser executado nesse caso provavelmente não causará problemas.
Ao contrário de alguns outros sistemas operacionais, no Unixes, é o shell que expande os caracteres curinga do nome do arquivo. Ele expande as expansões de parâmetros e globs primeiro, depois usa a primeira palavra (agora) como o nome do comando a ser executado.
É também por isso que os arquivos nomeados com um traço inicial podem ser problemáticos: um glob como
*
se expandirá para os nomes dos arquivos, e um nome que comece com um traço pode ser escolhido como uma opção. (O exemplo assustador é que um arquivo chamado-r
no diretório de trabalho fariarm *
remover tudo recursivamente ...)Normalmente, não se usaria
*
como o primeiro item em qualquer linha de comando, portanto, ter o primeiro arquivo determinando o comando a ser executado nesse caso provavelmente não causará problemas.