Qual é a função do asterisco como um comando autônomo no Unix?

21

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

Meu melhor palpite é que o Unix o tratou como um caractere curinga, por isso executou o primeiro programa alfabético. Como my_program.exe e one_of_my_programs.program podem ser executados simplesmente digitando o nome do arquivo, o operador curinga representa todos os arquivos possíveis. Como um programa é o primeiro em ordem alfabética, o Unix o executa. Isso é um julgamento correto?

    
por user6086585 04.10.2017 / 15:31

2 respostas

21

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 lista PATH .

Algumas notas que podem ajudar na compreensão: -

  • Se você digitar ./* , a entrada PATH não é um requisito.
  • Se você digitar . * ou . ./* e o primeiro arquivo correspondente for um script, ele não precisará ser executável nem precisará que o diretório atual esteja em PATH (pode não ser verdade para shells diferentes de bash ).
por 04.10.2017 / 16:21
11

Isso sugere que . faz parte da sua variável PATH . Essa é uma ideia muito ruim por razões de segurança (naturalmente, o Windows precisava torná-lo um padrão inalterável).

No entanto, essa "sugestão" é apenas levemente válida: se você tiver um arquivo chamado rm em seu diretório atual, * estará bem executando o padrã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 rm no diretório atual (um arquivo vazio e não executável) que foi executado, mas sim o padrão do sistema /bin/rm .

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

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

Este é o resultado de chamar

rm * .o

, mais ou menos a pior colocação de um espaço espúrio que se pode imaginar.

    
por 04.10.2017 / 23:03