O que faz o comando “:”? [duplicado]

0

Eu estava lendo alguns comandos no explicahell.com e encontrei um comando interessante:

:(){ :|:& };:

Atualmente, estou abaixo de OSX e a única referência a ele que encontrei foi na página builtin man ( man builtin ), mas isso não ajudou, porque apenas diz se é um externo, cshell ou comando sh.

       Command       External    csh(1)    sh(1)
       !             No          No        Yes
       %             No          Yes       No
       .             No          No        Yes
       :             No          Yes       Yes

Então, o que a execução de : faz?

No terminal, não tenho saída:

$ :
$
    
por AndreDurao 26.10.2016 / 21:15

2 respostas

6

Nesse caso, : não é um comando, é o nome de uma função que você está definindo. O comando :(){ :|:& };: é o que é chamado de "forkbomb" - é uma seqüência de comandos que define uma função chamada : , diz ao shell que a função consiste em chamar : , canalizar a saída para outra instância de : e baseando a segunda instância. A seqüência final ;: finaliza a definição da função e a chama. Cada chamada para : resulta em mais duas cópias de : sendo executadas, tão rápido quanto o shell pode gerá-las.
Isso resultará no uso de todos os recursos do sistema, o que levará ao sistema a abrandar ou a falhar se não houver um limite de processo definido.

    
por 26.10.2016 / 21:21
0

Se você não redefinir : , ele terá um significado padrão como não-op. Você pode ver sua documentação com help :

% help :
:: :
    No effect; the command does nothing.  A zero exit code is returned.

Diz a lenda que há muito tempo, no alvorecer da internet, era uma maneira de colocar texto em seus scripts de shell que não seriam executados. Uma espécie de comentário, em outras palavras. Eu não tenho uma fonte escrita para isso.

    
por 26.10.2016 / 21:39

Tags