Qual è il punto del comando "sì"?


39

C'è un yescomando in unix / linux che praticamente stampa all'infinito ysu stdout. Qual è il punto e come è utile?


Alcune possibilità extra qui .

1
possibile duplicato di Qual è il punto del comando `yes`? ... (Contrassegnando questo come duplicato perché è meglio porre l'altra domanda più recente e rispondere meglio).
Aditya,


Risposte:


41

yes può essere utilizzato per inviare una risposta affermativa (o negativa; ad esempio yes n) a qualsiasi comando che altrimenti richiederebbe uno, causando così l'esecuzione del comando in modo non interattivo.

Il comando yes in combinazione con il comando head può essere utilizzato per generare file di grandi volumi a scopo di test.

Può anche essere utilizzato per testare la capacità di un sistema di gestire carichi elevati, poiché l'utilizzo di yes comporta un utilizzo del processore del 100%, per i sistemi con un singolo processore (per un sistema multiprocessore, è necessario eseguire un processo per ciascun processore). Questo, ad esempio, può essere utile per verificare se il sistema di raffreddamento di un sistema sarà efficace quando il processore è in esecuzione al 100%.

Nel 2006, il comando yes ha ricevuto pubblicità per essere un mezzo per testare se il MacBook di un utente è interessato o meno dalla Sindrome da spegnimento intermittente. Eseguendo il comando yes due volte tramite Terminale in Mac OS X, gli utenti sono stati in grado di massimizzare la CPU del proprio computer e quindi vedere se l'errore era legato al calore

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


9
Per danni extra, provayes `yes yes`
sendmoreinfo il

3
@sendmoreinfo Evil
Tobias Kienzler

ohh, questo è un bel test di stress. l'ho appena provato, poi sono corso dal mio collega chiedendo un nuovo vm xD
Toastgeraet il

17

Questa potrebbe essere un'opinione controversa, ma a mio avviso è una brutta soluzione per una cattiva interfaccia utente negli strumenti da riga di comando .

Alcuni strumenti da riga di comando pongono domande all'utente con un prompt e non hanno un'opzione per l'esecuzione in modo non interattivo; immagina per esempio qualcosa come

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

Poiché la risposta alla domanda è presa dall'input standard, una soluzione rapida a questo problema è avere un'applicazione che emette y\ncontinuamente la stringa , che è esattamente ciò che yesfa. Le pipe Unix possono essere utilizzate per inviare questo output come input per un dato comando.

$ yes | frobnicate

Uno dei problemi con questo approccio è che yesnon ha alcuna possibilità di verificare la domanda a cui sta rispondendo:

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

Una soluzione migliore, quando è disponibile, è un'opzione specifica per l'esecuzione non interattiva, come rm -fo apt-get -y. Ciò consente di codificare comportamenti più sensibili nell'applicazione.


1
Ho letto tutte le altre risposte. Sono d'accordo con il vostro completamente WRT brutta fix ... anche se fa un uso valida per testare la risposta del computer per carichi elevati cpu.
Wildcard il

6
Naturalmente, è possibile utilizzare il software proprietario "Microsoft Windows" per testare la risposta del computer a elevati carichi della CPU, ma "sì" è open source.
Wildcard il

1
È una delle più belle brutte correzioni però
Jezzamon,

4

Mi piace usare yesquando sto decomprimendo più file .zip che contengono tutti lo stesso file con lo stesso nome e mi viene chiesto cosa fare in ciascun caso (es. Un contratto di licenza).

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

2

Mi sono appena imbattuto in un altro uso: mi è piaciuto cancellare un disco rigido con un modello diverso rispetto ai soli zero (come: dd if = / dev / zero of = / dev / sdd bs = 1M) e ha usato 'yes' per questo:

yes UUUUUUUUUUUUU > /dev/sdd


1

Un collega lo ha usato in un modo nuovo per inserire una password

yes password | passwd

passwdchiederà prima la vecchia password, se l'utente non è root o un superutente e non continuerà se non viene inserita la password corretta. Quindi, l'utente è root o anche passwordla vecchia password e nulla è cambiato.
Michael Konietzka,

@MichaelKonietzka davvero. Ma con le condizioni che hai menzionato è ancora un utile caso d'uso.
frogstarr78,

3
Solo che questo persisterebbe nella storia in chiaro. Crazeyyy.
Gleno,

3
@Gleno in bash, si può precedere con uno spazio per evitare che in fase di registrazione (come in stackoverflow.com/q/640403/118153 )
Iiridayn

2
Inoltre, ciò perde la password a tutti gli utenti locali nell'elenco dei processi ( pso topal momento giusto).
Federico Poloni,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.