Qual é o objetivo do comando "yes"?

39

Existe um yescomando no unix / linux que basicamente infinitamente imprime yao stdout. Qual é o objetivo disso e como é útil?

Cemre
fonte
Algumas possibilidades extras aqui .
1
possível duplicata de Qual é o objetivo do comando `yes`? ... (Sinalizando isso como duplicado porque a outra pergunta mais recente é melhor solicitada e melhor respondida).
Aditya
Relação
Jeff Schaller

Respostas:

41

yes pode ser usado para enviar uma resposta afirmativa (ou negativa; por exemplo, yes n) a qualquer comando que, de outra forma, solicitaria um, fazendo com que o comando fosse executado de maneira não interativa.

O comando yes em conjunto com o comando head pode ser usado para gerar arquivos de grande volume para meios de teste.

Também pode ser usado para testar como um sistema lida com altas cargas, pois o uso de yes resulta em 100% de uso do processador, para sistemas com um único processador (para um sistema multiprocessador, um processo deve ser executado para cada processador). Isso, por exemplo, pode ser útil para investigar se o sistema de resfriamento de um sistema será eficaz quando o processador estiver funcionando a 100%.

Em 2006, o comando yes recebeu publicidade por ser um meio de testar se o MacBook de um usuário é ou não afetado pela Síndrome de Desligamento Intermitente. Ao executar o comando yes duas vezes via Terminal no Mac OS X, os usuários conseguiram maximizar a CPU do computador e, assim, ver se a falha estava relacionada ao calor

via wikipedia: http://en.wikipedia.org/wiki/Yes_(Unix)

d3vin
fonte
9
Para danos extras, tenteyes `yes yes`
sendmoreinfo
3
@sendmoreinfo Evil
Tobias Kienzler 13/13
Oh, isso é um bom teste de estresse. tentei, então corri para o meu colega pedindo um novo vm xD
Toastgeraet 04/07
17

Essa pode ser uma opinião controversa, mas, na minha opinião , é uma correção feia para uma interface de usuário ruim em ferramentas de linha de comando .

Algumas ferramentas de linha de comando fazem perguntas ao usuário com um prompt e não têm a opção de executar de maneira não interativa; imagine, por exemplo, algo como

$ frobnicate *
frobnicate file a.txt? (y/n) y
frobnicate file b.txt? (y/n) y
...

Como a resposta à pergunta é extraída da entrada padrão, uma solução rápida para esse problema é ter um aplicativo que gera a string y\ncontinuamente, e é exatamente yesisso que faz. Unix tubos pode ser usado para enviar esta saída como uma entrada para um determinado comando.

$ yes | frobnicate

Um dos problemas dessa abordagem é que yesnão há possibilidade de verificar a pergunta para a qual está respondendo:

frobnicate file a.txt? (y/n) y
frobnicate file b.txt? (y/n) y
format device /dev/sda1? (y/n) y
frobnicate file c.txt? (y/n) y

Uma solução melhor, quando disponível, é uma opção específica para executar de maneira não interativa, como rm -fou apt-get -y. Isso permite codificar um comportamento mais sensível no aplicativo.

Federico Poloni
fonte
1
Eu li todas as outras respostas. Concordo com o seu completamente wrt correção feio ... embora não têm um uso válido para testar a resposta do computador para altas cargas de CPU.
Curinga
6
Obviamente, você pode usar o software proprietário "Microsoft Windows" para testar a resposta do computador a altas cargas de CPU, mas "sim" é de código aberto.
Wildcard
1
É uma das mais belas correções feias embora
Jezzamon
4

Eu gosto de usar yesquando estou descompactando vários arquivos .zip que contêm o mesmo arquivo com o mesmo nome e me perguntam o que fazer em cada caso (por exemplo, um contrato de licença).

yes | for z in *.zip; do unzip "$z"; done 
daloonik
fonte
2

Acabei de encontrar outro uso para ele: gostava de limpar um disco rígido com um padrão diferente de apenas zeros (como: dd se = / dev / zero de = / dev / sdd bs = 1M) e usou 'yes' para isso:

yes UUUUUUUUUUUUU > /dev/sdd

user1724834
fonte
1

Um colega de trabalho usou isso de uma maneira nova para inserir uma senha

yes password | passwd
frogstarr78
fonte
passwdsolicitará a senha antiga primeiro, se o usuário não for root ou um superusuário e não continuará, a menos que a senha correta seja digitada. Portanto, o usuário é root ou também passwordé a senha antiga e nada é alterado.
Michael Konietzka
@MichaelKonietzka de fato. Mas com as condições que você mencionou, ainda é um caso de uso útil.
Frogstarr78
3
Exceto que isso persistiria na história em texto simples. Crazeyyy.
Gleno 16/08
3
@Gleno em bash, você pode precedê-lo com um espaço para impedir que ele seja gravado (como no stackoverflow.com/q/640403/118153 )
Iiridayn
2
Além disso, isso vaza a senha para todos os usuários locais na lista de processos ( psou topno momento certo).
Federico Poloni