web-dev-qa-db-pt.com

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

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 curinga, então 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?

21
user6086585

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

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

Algumas notas que podem ajudar a entender:

  • Se você digitar ./*, a entrada PATH não será um requisito.
  • Se você digitar . * ou . ./* e o primeiro arquivo correspondente for um script, ele não precisará ser executável nem o diretório atual estar em PATH (pode não ser verdadeiro para shells diferentes de bash).
21
AFH

Isso sugere que . faz parte da sua variável PATH. Essa é uma péssima idéia por razões de segurança (naturalmente, o Windows precisava torná-lo um padrão não modificável).

No entanto, esta "sugestão" é apenas levemente válida: se você tiver um arquivo chamado rm em seu diretório atual, * estará bem executando o padrãorm:

/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 /bin/rm padrão do sistema.

Sempre verifique seus comandos quando os curingas estiverem envolvidos. Aqui está uma das mensagens mais terríveis que já leu:

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 falso que se pode imaginar.

11
user777455