Como usar o comando yes no Linux

O comando yes parece muito simples para ter algum uso prático, mas neste tutorial, mostraremos sua aplicação e como se beneficiar de sua positividade reprimida no Linux e macOS.

O comando sim

O comando yes é um dos comandos mais simples no Linux e em outros sistemas operacionais semelhantes ao Unix, como o macOS. E por simples, queremos dizer simples em seu uso e sua implementação inicial. O código-fonte da versão original – lançado no System 7 Unix e de autoria de Ken Thompson– equivale a um mero seis linhas de código.

Mas não o descarte por ser um pequeno comando simples. Ele pode ser usado de algumas maneiras interessantes e úteis.

O que sim faz?

Usado sem nenhum parâmetro de linha de comando, o comando yes se comporta como se você estivesse digitando “y” e pressionando Enter, repetidamente (e indefinidamente) novamente. Muito rapidamente. E continuará fazendo isso até que você pressione Ctrl + C para interrompê-lo.

yes

Na verdade, sim pode ser usado para gerar repetidamente qualquer mensagem que você escolher. Simplesmente digite sim, um espaço, a string que deseja usar e pressione Enter. Isso geralmente é usado para fazer com que sim gere um fluxo de saída de strings “sim” ou “não”.

yes yes

yes anything you like

Mas que uso é esse?

A saída do yes pode ser canalizada para outros programas ou scripts.

Isso soa familiar? Você inicia um longo processo em execução e se afasta, deixando-o para ser executado. Quando você retorna ao seu computador, o processo não foi concluído. Na sua ausência, ele fez uma pergunta e ficou esperando por uma resposta “sim” ou “não”.

Se você sabe com antecedência que todas as suas respostas serão positivas (“sim” ou “s”) ou negativas (“não” ou “n”), você pode usar sim para fornecer essas respostas para você. Seu longo processo será executado até a conclusão sem supervisão com sim fornecendo as respostas para todas as perguntas que o processo fizer.

  Como recuperar arquivos excluídos no Linux com Photorec

Usando sim com scripts

Observe o seguinte script de shell Bash. (Precisamos imaginar que esta é uma parte de um script muito maior que levará um tempo considerável para ser executado.)

#!/bin/bash

# ...
# in the middle of some long script
# obtain a response from the user
# ...

echo "Are you happy to proceed? [y,n]"
read input

# did we get an input value?
if [ "$input" == "" ]; then

   echo "Nothing was entered by the user"

# was it a y or a yes?
elif [[ "$input" == "y" ]] || [[ "$input" == "yes" ]]; then

   echo "Positive response: $input"

# treat anything else as a negative response
else

   echo "negative response: $input"

fi

Este script faz uma pergunta e aguarda uma resposta. O fluxo lógico dentro do script é decidido pela entrada do usuário.

Um “sim” ou “y” indica uma resposta positiva.
Qualquer outra entrada é considerada uma resposta negativa.
Pressionar Enter sem texto de entrada não faz nada.

Para testar isso, copie o script para um arquivo e salve-o como long_script.sh. Use chmod para torná-lo executável.

chmod +x long_script.sh

Execute o script com o seguinte comando. Tente fornecer “sim”, “y” e qualquer outra coisa como entrada, incluindo pressionar Enter sem nenhum texto de entrada.

./long_script.sh

Para obter que sim para fornecer nossa resposta à pergunta do script, canalize a saída de sim para o script.

yes | ./long_script.sh

Alguns scripts são mais rígidos em seus requisitos e aceitam apenas a palavra “sim” completa como uma resposta positiva. Você pode fornecer “sim” como um parâmetro para sim, da seguinte maneira:

yes yes | ./long_script.sh

Não diga sim sem pensar direito

Você precisa ter certeza de que a entrada que irá alimentar o script ou programa certamente dará o resultado que você espera. Para poder tomar essa decisão, você deve conhecer as perguntas e quais devem ser suas respostas.

  As 5 melhores estações de encaixe para laptop para usar com Linux (edição de 2021)

A lógica do script, comando ou programa pode não corresponder às suas expectativas. Em nosso script de exemplo, a pergunta pode ter sido “Você deseja parar? [y,n]. ” Se fosse esse o caso, uma resposta negativa teria permitido que o script continuasse.

Você deve estar familiarizado com o script, comando ou programa antes de enviar um sim para ele.

Usando sim com comandos

Em sua infância, sim seria usado com outros comandos do Linux. Desde então, a maioria dos outros comandos do Linux têm sua própria maneira de funcionar sem interação humana. sim não é mais necessário para conseguir isso.

Vamos tomar o gerenciador de pacotes do Ubuntu apt-get como exemplo. Para instalar um aplicativo sem ter que pressionar “y” no meio da instalação, sim teria sido usado da seguinte maneira:

yes | sudo apt-get install fortune-mod

O mesmo resultado pode ser alcançado usando a opção -y (suponha que sim) no apt-get:

sudo apt-get -y install fortune-mod

Você verá que o apt-get nem mesmo perguntou ao seu usual “Você quer continuar? [Y/n]” pergunta. Ele apenas presumiu que a resposta seria “sim”.

Em outras distribuições Linux, a situação é a mesma. No Fedora, você teria usado este tipo de comando do gerenciador de pacotes ao mesmo tempo:

yes | yum install fortune-mod

O gerenciador de pacotes dnf substituiu yum e dnf tem sua própria opção -y (suponha que sim).

dnf -y install fortune-mod

O mesmo se aplica a cp, fsck e rm. Cada um desses comandos tem suas próprias opções -f (forçar) ou -y (assumir que sim).

Então, parece que sim foi relegado a trabalhar apenas com scripts? Não exatamente. Ainda existem mais alguns truques no velho cão.

Mais alguns truques sim

Você pode usar yes com uma sequência de dígitos gerados por seq para controlar um loop de ações repetidas.

  4 melhores distribuições Linux para instalar em um Google Chromebook

Este one-liner ecoa os dígitos gerados para a janela do terminal e, em seguida, chama o modo de espera por um segundo.

Em vez de simplesmente ecoar os dígitos para a janela do terminal, você pode chamar outro comando ou script. Esse comando ou script nem precisa usar os dígitos, e eles estão lá apenas para iniciar cada ciclo do loop.

yes "$(seq 1 20)" | while read digit; do echo digit; sleep 1; done

Às vezes é útil ter um arquivo grande para testar. Talvez você queira praticar o uso do comando zip ou deseja ter um arquivo considerável para testar os uploads de FTP.

Você pode gerar arquivos grandes rapidamente com sim. Tudo que você precisa fazer é fornecer uma longa sequência de texto para trabalhar e redirecionar a saída para um arquivo. Não cometa erros; esses arquivos crescerão rapidamente. Esteja pronto para pressionar Ctrl + C em alguns segundos.

yes long line of meaningless text for file padding > test.txt
ls -lh test.txt
wc test.txt

O arquivo gerado aqui levou cerca de cinco segundos na máquina de teste usada para pesquisar este artigo. O ls informa que tem 557 Mb de tamanho e informamos que há 12,4 milhões de linhas nele.

Podemos limitar o tamanho do arquivo incluindo head em nossa string de comando. Dizemos quantas linhas incluir no arquivo. O -50 significa head permitirá que apenas 50 linhas cheguem ao arquivo test.txt.

yes long line of meaningless text for file padding | head -50 > test.txt

Assim que houver 50 linhas no arquivo test.txt, o processo será interrompido. Você não precisa usar Ctrl + C. Ele chega a uma parada graciosa por sua própria vontade.

O wc informa que há exatamente 50 linhas no arquivo, 400 palavras e 2350 bytes de tamanho.

Embora ainda seja útil para alimentar as respostas em scripts de longa execução (e alguns outros truques), o comando yes não fará parte do seu kit de ferramentas diário de comandos. Mas, quando você precisar, descobrirá que é a própria simplicidade – e tudo em seis linhas de código dourado.