Qual é a função do asterisco como comando independente no Unix?

Qual é a função do asterisco como comando independente no Unix?

Eu estava mexendo no terminal do Red Hat Linux, e quando digitei o asterisco ( *) seguido de return, ele executou um dos programas do meu diretório. Por que?

Meu melhor palpite é que o Unix o tratou como um curinga e executou o primeiro programa alfabético. Como my_program.exee one_of_my_programs.programpode ser executado simplesmente digitando o nome do arquivo, o operador curinga representa todos os arquivos possíveis. Como um programa é primeiro colocado em ordem alfabética, o Unix o executa. Este é um julgamento correto?

Responder1

Sua interpretação está correta. O restante dos arquivos será apresentado como sua lista de parâmetros.

Observe que isso será feito somente se o programa tiver o bit executável definido e o diretório atual estiver na PATHlista.

Algumas notas que podem ajudar na compreensão: -

  • Se você digitar ./*, a PATHentrada não será um requisito.
  • Se você digitar . *ou . ./*e o primeiro arquivo correspondente for um script, então ele não precisa ser executável, nem precisa que o diretório atual esteja PATH(pode não ser verdade para shells diferentes de bash).

Responder2

Isso sugere que isso .faz parte da sua PATHvariável. Essa é uma péssima ideia por motivos de segurança (naturalmente, o Windows teve que torná-la um padrão inalterável).

No entanto, esta "sugestão" é apenas moderadamente válida: se você tiver um arquivo nomeado rmem seu diretório atual, *não há problema em executar opadrão rm:

/tmp$ mkdir ohno
/tmp$ cd ohno
/tmp/ohno$ 
/tmp/ohno$ ls
/tmp/ohno$ touch rm what
/tmp/ohno$ ls
rm  what
/tmp/ohno$ *
/tmp/ohno$ ls
rm
/tmp/ohno$ 

Como você pode ver, não foi rmno diretório atual (um arquivo vazio e não executável) que foi executado, mas sim no diretório padrão do sistema /bin/rm.

Sempre verifique seus comandos quando curingas estiverem envolvidos. Aqui está uma das mensagens mais aterrorizantes que já li:

rm: cannot remove '.o': No such file or directory

Este é o resultado de chamar

rm * .o

, mais ou menos o pior posicionamento de um espaço espúrio que alguém pode imaginar.

informação relacionada