Eu estava brincando no terminal do Red Hat Linux e, quando digitei o asterisk ( *
) seguido de retorno, ele executou um dos programas no meu diretório. Por quê?
Meu melhor palpite é que o Unix o tratou como um curinga, por isso executou o primeiro programa alfabético. Como my_program.exe
e one_of_my_programs.program
pode ser executado 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. Este é um julgamento correto?
linux
command-line
bash
unix
user6086585
fonte
fonte
*
alfabeticamente, mas o bash é o que faz.Respostas:
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
PATH
lista.Algumas notas que podem ajudar a entender: -
./*
, aPATH
entrada não é um requisito.. *
ou. ./*
e o primeiro arquivo correspondente for um script, ele não precisará ser executável nem o diretório atual estarPATH
(pode não ser verdade para shells que não sejambash
).fonte
PATH
com o mesmo nome que o primeiro arquivo, esse outro comando será executado.mkdir foo; cd foo; touch rm xyz; ls; *; ls
.*
for um alias.. *
ou. ./*
uma latabash *
(ou qualquer outra concha).Isso sugere que
.
faz parte da suaPATH
variável. 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, essa "sugestão" é apenas levemente válida: se você tiver um arquivo nomeado
rm
em seu diretório atual,*
executará o padrãorm
:Como você pode ver, não estava
rm
no diretório atual (um arquivo vazio e não executável) que foi executado, mas sim no padrão do sistema/bin/rm
.Sempre verifique seus comandos quando houver caracteres curinga. Aqui está uma das mensagens mais aterradoras já lidas:
Este é o resultado de chamar
, mais ou menos o pior posicionamento de um espaço falso que se pode imaginar.
fonte
rm()
que adicione-i
parâmetros ou verifique os parâmetros e solicite confirmação se houver mais de um determinado número.mv /tmp/ohno /tmp/ohnoes
( google.fr/search?q=ohnoes&source=lnms&tbm=isch )