O que o comando ":" faz?

O que o comando ":" faz?

Eu estava lendo alguns comandos noexplicashell.come encontre um comando interessante:

:(){ :|:& };:

Atualmente estou abaixo OSXe a única referência que consegui encontrar foi na builtinpágina de manual ( man builtin), mas isso não ajudou porque apenas diz se é um comando externo, cshell ou 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 :faz?

No terminal não tenho saída:

$ :
$

Responder1

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

Responder2

Se vocênãoredefinir :, ele tem um significado padrão como autônomo. Você pode ver sua documentação comhelp :

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

Diz a lenda que há muito tempo, nos primórdios da internet, essa era uma forma de colocar texto em seus scripts de shell que não seriam executados. Uma espécie de comentário, em outras palavras. Não tenho uma fonte escrita para isso.

informação relacionada