Was ist der Sinn des "Ja" -Befehls?

39

Es gibt einen yesBefehl in Unix / Linux , die im Grunde unendlich drucken yauf den stdout. Was ist der Sinn davon und wie ist es nützlich?

Cemre
quelle
Ein paar zusätzliche Möglichkeiten hier .
1
mögliches Duplikat von Was ist der Sinn des "Ja" -Befehls? ... (Dies als Duplikat kennzeichnen, da die andere neuere Frage besser gestellt und besser beantwortet wird).
Aditya
Relating: unix.stackexchange.com/q/257297/117549
Jeff Schaller

Antworten:

41

yes kann verwendet werden, um eine positive (oder negative; z. B. yes n) Antwort auf einen Befehl zu senden, der andernfalls eine anfordern würde, wodurch der Befehl nicht interaktiv ausgeführt wird.

Der Befehl yes in Verbindung mit dem Befehl head kann verwendet werden, um große Volumendateien für Testzwecke zu generieren.

Es kann auch verwendet werden, um zu testen, wie gut ein System mit hohen Lasten umgeht, da die Verwendung von yes bei Systemen mit einem einzelnen Prozessor zu 100% zu einer Prozessorauslastung führt (bei einem Multiprozessorsystem muss für jeden Prozessor ein Prozess ausgeführt werden). Dies kann beispielsweise hilfreich sein, um zu untersuchen, ob das Kühlsystem eines Systems effektiv ist, wenn der Prozessor zu 100% läuft.

Im Jahr 2006 wurde der Befehl yes veröffentlicht, um zu testen, ob das MacBook eines Benutzers vom intermittierenden Abschaltsyndrom betroffen ist. Durch zweimaliges Ausführen des Befehls yes über das Terminal unter Mac OS X konnten Benutzer die CPU ihres Computers voll ausnutzen und so feststellen, ob der Fehler durch Hitze verursacht wurde

über Wikipedia: http://en.wikipedia.org/wiki/Yes_(Unix)

d3vin
quelle
9
Für zusätzlichen Schaden versuchen Sieyes `yes yes`
sendmoreinfo
3
@sendmoreinfo Evil
Tobias Kienzler
ohh, das ist ein schöner Stresstest. habe es gerade ausprobiert, bin dann zu meinem kollegen
gelaufen
17

Dies mag eine kontroverse Meinung sein, aber meiner Meinung nach ist dies eine hässliche Lösung für eine schlechte Benutzeroberfläche in Befehlszeilentools .

Einige Befehlszeilentools stellen dem Benutzer über eine Eingabeaufforderung Fragen und haben keine Option, nicht interaktiv ausgeführt zu werden. Stellen Sie sich zum Beispiel etwas vor wie

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

Da die Antwort auf die Frage von der Standardeingabe stammt, besteht eine schnelle Lösung für dieses Problem darin, dass eine Anwendung die Zeichenfolge y\nkontinuierlich ausgibt yes. Unix- Pipes können verwendet werden, um diese Ausgabe als Eingabe an einen bestimmten Befehl zu senden.

$ yes | frobnicate

Eines der Probleme bei diesem Ansatz ist, dass yeses keine Möglichkeit gibt, die Frage zu überprüfen, auf die es antwortet:

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

Eine bessere Lösung ist, wenn sie verfügbar ist, eine spezielle Option, die nicht interaktiv ausgeführt werden kann, z. B. rm -foder apt-get -y. Dies ermöglicht die Codierung eines sinnvolleren Verhaltens in der Anwendung.

Federico Poloni
quelle
1
Ich habe alle anderen Antworten gelesen. Ich stimme völlig mit Ihnen WRT hässlich fix ... obwohl es tut zum Testen Computer reagiert auf hohe CPU - Belastung eine gültige Verwendung haben.
Wildcard
6
Natürlich können Sie die proprietäre Software "Microsoft Windows" verwenden, um die Reaktion des Computers auf hohe CPU-Lasten zu testen, aber "yes" ist Open Source.
Wildcard
1
Es ist jedoch eine der schönsten hässlichen Korrekturen
Jezzamon
4

Ich verwende es gerne, yeswenn ich mehrere .zip-Dateien entpacke, die alle dieselbe Datei mit demselben Namen enthalten, und werde gefragt, was in jedem Fall zu tun ist (z. B. eine Lizenzvereinbarung).

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

Ist gerade auf eine andere Verwendung gestoßen: wollte eine Festplatte mit einem anderen Muster als nur Nullen löschen (wie: dd if = / dev / null von = / dev / sdd bs = 1M) und hat 'yes' dafür verwendet:

yes UUUUUUUUUUUUU > /dev/sdd

user1724834
quelle
1

Ein Mitarbeiter benutzte dies auf neuartige Weise, um ein Passwort einzugeben

yes password | passwd
frogstarr78
quelle
passwdfragt zuerst nach dem alten Passwort, wenn der Benutzer kein Root oder Superuser ist und fährt erst fort, wenn das richtige Passwort eingegeben wurde. Entweder ist der Benutzer root oder passworddas alte Passwort und es wird nichts geändert.
Michael Konietzka
@ MichaelKonietzka in der Tat. Aber unter den Bedingungen, die Sie erwähnt haben, ist es immer noch ein nützlicher Anwendungsfall.
Frogstarr78
3
Außer dies würde in der Geschichte im Klartext bestehen bleiben. Verrückt.
Gleno
3
@ Gleno in Bash, Sie können es mit einem Leerzeichen voranstellen, um zu verhindern, dass es aufgezeichnet wird (wie in stackoverflow.com/q/640403/118153 )
Iiridayn
2
Dadurch wird das Kennwort auch an alle lokalen Benutzer in der Prozessliste ( psoder topim richtigen Moment) weitergegeben.
Federico Poloni