O que sim $ (yes yes) faz?


23

Pensando em qual seria o uso do yescomando, deparei-me com este comentário e tentei executar

yes $(yes yes)

Pelo que entendi, isso deve simplesmente imprimir uma sequência infinita de yes, mas não gera nada e trava meu terminal gráfico após alguns segundos. (Se eu executá-lo em tty1, vejo o prompt de login após algum tempo.)

O que esta acontecendo aqui?


2
Não sou especialista, mas pode ser que a primeira invocação esteja tentando imprimir infinito vezes infinitas. (ou o argumento pode ser simplesmente demasiado longo.)
strugee

5
@ strugee A lista de argumentos nunca é preenchida, porque yesnunca retorna.
Chris Baixo

@strugee Você pode obter "infinito infinitas vezes" utilizando xargs: yes yes | xargs -P 0 yes(ou sem -P 0para o infinito processo single)
Kyle Strand

Respostas:


25

Já deve ser o suficiente para executar

 echo $(yes yes)

Ele $(...)executa o comando interno até que seja concluído e captura toda a sua saída. - Agora, como yesdemora muito e gera muita saída, o bash acabará ficando sem memória e trava.


6

Para ver a mensagem do erro que fecha seu shell, você precisa executar um sub shell.

$ sh
$ kill -9 $$
Killed
$

$ sh
$ yes $(yes yes)
sh: xrealloc: cannot allocate 18446744071562067968 bytes
$

1
16 milhões de gigabytes, não é? Gordon Moore está escondido em um canto vai, "Bem ... Quero dizer, não é bem ainda ..."
Ferd
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.