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?


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


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)


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.


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 

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


1

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

yes password | passwd

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
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.