Come utilizzare il comando yes su Linux

Il comando yes sembra troppo semplice per essere di qualsiasi utilità pratica, ma in questo tutorial ti mostreremo la sua applicazione e come trarre vantaggio dalla sua positività repressa in Linux e macOS.

Il comando sì

Il comando yes è uno dei comandi più semplici in Linux e altri sistemi operativi simili a Unix come macOS. E per semplice intendiamo semplice nel suo utilizzo e nella sua implementazione iniziale. Il codice sorgente della versione originale — rilasciato in System 7 Unix e creato da Ken Thompson—Ammonta a un mero sei righe di codice.

Ma non cancellarlo per essere un semplice piccolo comando. Può essere utilizzato in alcuni modi interessanti e utili.

Cosa fa sì?

Usato senza alcun parametro della riga di comando, il comando yes si comporta come se stessi digitando “y” e premendo Invio, ancora e ancora (e ancora e ancora). Molto velocemente. E continuerà a farlo finché non premi Ctrl + C per interromperlo.

yes

output da sì in una finestra di terminale

In effetti, sì può essere utilizzato per generare ripetutamente qualsiasi messaggio tu scelga. Digita semplicemente sì, uno spazio, la stringa che desideri utilizzare, quindi premi Invio. Questo è spesso usato per far sì che si generi un flusso di output di stringhe “sì” o “no”.

yes yes

output da sì sì in una finestra di terminale

yes anything you like

output da yes con una riga di testo in una finestra di terminale

Ma a cosa serve?

L’output di yes può essere reindirizzato in altri programmi o script.

Questo suona familiare? Inizi un lungo processo in esecuzione e ti allontani, lasciandolo correre. Quando torni al tuo computer, il processo non è stato affatto completato. In tua assenza, ti ha posto una domanda ed è seduto in attesa di una risposta “sì” o “no”.

Se sai in anticipo che tutte le tue risposte saranno positive (“sì” o “y”) o negative (“no” o “n”) puoi usare sì per fornire quelle risposte per te. Il tuo lungo processo verrà quindi eseguito fino al completamento incustodito con sì che fornirà le risposte a tutte le domande che il processo pone.

Utilizzo di sì con gli script

Guarda il seguente script della shell Bash. (Dobbiamo immaginare che questa sia una parte di uno script molto più grande che richiederà molto tempo per essere eseguito.)

#!/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

Questo script pone una domanda e attende una risposta. Il flusso logico all’interno dello script viene deciso dall’input dell’utente.

Un “sì” o “y” indica una risposta positiva.
Qualsiasi altro input è considerato una risposta negativa.
Premendo Invio senza testo di input non ha effetto.

Per verificarlo, copia lo script in un file e salvalo come long_script.sh. Usa chmod per renderlo eseguibile.

chmod +x long_script.sh

Esegui lo script con il seguente comando. Prova a fornire “sì”, “y” e qualsiasi altra cosa come input, inclusa la pressione di Invio senza testo di input.

./long_script.sh

output da long_script.sh in una finestra di terminale

Per ottenere sì per fornire la nostra risposta alla domanda dello script, reindirizza l’output da sì allo script.

yes | ./long_script.sh

reindirizzare yes in long_script.sh in una finestra di terminale

Alcuni script sono più rigidi nei loro requisiti e accettano solo la parola completa “sì” come risposta positiva. È possibile fornire “sì” come parametro a sì, come segue:

yes yes | ./long_script.sh

piping yes yes in long_script.sh in una finestra di terminale

Non dire di sì senza pensarci bene

Devi essere certo che l’input che fornirai allo script o al programma ti darà sicuramente il risultato che ti aspetti. Per poter prendere quella decisione, devi conoscere le domande e quali dovrebbero essere le tue risposte.

La logica nello script, nel comando o nel programma potrebbe non corrispondere alle tue aspettative. Nel nostro script di esempio, la domanda potrebbe essere stata “Vuoi smettere? [y,n]. ” Se fosse stato così, una risposta negativa avrebbe consentito allo script di procedere.

È necessario avere familiarità con lo script, il comando o il programma prima di inserire allegramente sì in esso.

Utilizzo di sì con i comandi

Nella sua infanzia, sì sarebbe stato utilizzato con altri comandi Linux. Da allora, la maggior parte di questi altri comandi Linux ha il proprio modo di funzionare senza interazione umana. sì non è più necessario per raggiungere questo obiettivo.

Prendiamo il gestore di pacchetti di Ubuntu apt-get come esempio. Per installare un’applicazione senza dover premere “y” a metà dell’installazione, sì sarebbe stato utilizzato come segue:

yes | sudo apt-get install fortune-mod

piping yes in apt-get in una finestra di terminale

Lo stesso risultato può essere ottenuto usando l’opzione -y (presumo sì) in apt-get:

sudo apt-get -y install fortune-mod

usando apt-get con l'opzione assume yes in una finestra di terminale

Vedrai che apt-get non ha nemmeno chiesto al solito “Vuoi continuare? [Y/n]”Domanda. Si presumeva che la risposta fosse “sì”.

Su altre distribuzioni Linux, la situazione è la stessa. Su Fedora avresti usato questo tipo di comando del gestore di pacchetti contemporaneamente:

yes | yum install fortune-mod

Il gestore di pacchetti dnf ha sostituito yum e dnf ha la sua opzione -y (presumo di sì).

dnf -y install fortune-mod

Lo stesso vale per cp, fsck e rm. Ciascuno di questi comandi ha le proprie opzioni -f (forza) o -y (si assume sì).

Quindi sembra che il sì sia stato relegato a lavorare solo con gli script? Non proprio. Ci sono ancora alcuni altri trucchi nel vecchio cane.

Alcuni ulteriori trucchi sì

È possibile utilizzare yes con una sequenza di cifre generate da seq per controllare un ciclo di azioni ripetute.

Questo one-liner fa eco alle cifre generate nella finestra del terminale e quindi chiama sleep per un secondo.

Invece di ripetere semplicemente le cifre nella finestra del terminale, puoi chiamare un altro comando o script. Quel comando o script non ha nemmeno bisogno di usare le cifre, e sono lì solo per avviare ogni ciclo del ciclo.

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

sì una riga che regola un loop nella finestra del terminale

A volte è utile avere un file di grandi dimensioni con cui testare. Forse vuoi esercitarti usando il comando zip, o vuoi avere un file di grandi dimensioni con cui testare i caricamenti FTP.

Puoi generare rapidamente file di grandi dimensioni con yes. Tutto quello che devi fare è dargli una lunga stringa di testo con cui lavorare e reindirizzare l’output in un file. Non fare errori; quei file cresceranno rapidamente. Preparati a premere Ctrl + C entro pochi secondi.

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

generazione di file di test con sì ia finestra del terminale

Il file generato qui ha impiegato circa cinque secondi sulla macchina di prova utilizzata per la ricerca di questo articolo. Segnala che ha una dimensione di 557 Mb e ci dice che ci sono 12,4 milioni di righe.

Possiamo limitare la dimensione del file includendo head nella nostra stringa di comando. Gli diciamo quante righe includere nel file. Il -50 significa che head lascerà passare solo 50 righe al file test.txt.

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

usando head per limitare la dimensione di un file dalla finestra del terminale

Non appena ci sono 50 righe nel file test.txt, il processo si interromperà. Non è necessario utilizzare Ctrl + C. Si arresta graziosamente di sua spontanea volontà.

wc segnala che ci sono esattamente 50 righe nel file, 400 parole e la dimensione è di 2350 byte.

Anche se è ancora utile per alimentare le risposte in script di lunga durata (e alcuni altri trucchi), il comando yes non farà parte del tuo toolkit quotidiano di comandi. Ma quando ne avrai bisogno, scoprirai che è la semplicità stessa, e tutto in sei righe di codice d’oro.