Fatmawati Achmad Zaenuri / Shutterstock.com
Der Befehl yes scheint zu einfach zu sein, um von praktischem Nutzen zu sein. In diesem Tutorial zeigen wir Ihnen jedoch seine Anwendung und wie Sie von seiner aufgestauten Positivität unter Linux und MacOS profitieren können.
Der Ja-Befehl
Das yes
Befehl ist einer der einfachsten Befehle unter Linux und anderen Unix-ähnlichen Betriebssystemen wie macOS. Und mit einfach meinen wir einfach in seiner Verwendung und seiner anfänglichen Implementierung. Der Quellcode für die Originalversion – veröffentlicht in System 7 Unix und verfasst von Ken Thompson– ist nur eine sechs Codezeilen.
Aber schreiben Sie es nicht ab, weil es ein einfacher kleiner Befehl ist. Es kann auf interessante und nützliche Weise verwendet werden.
Was macht ja?
Wird ohne Befehlszeilenparameter verwendet yes
Der Befehl verhält sich so, als würden Sie „y“ eingeben und immer wieder (und immer und immer wieder) die Eingabetaste drücken. Sehr schnell. Dies wird so lange fortgesetzt, bis Sie Strg + C drücken, um es zu unterbrechen.
yes

Eigentlich, yes
kann verwendet werden, um eine beliebige Nachricht, die Sie auswählen, wiederholt zu generieren. Einfach eingeben yes
, ein Leerzeichen, die Zeichenfolge, die Sie verwenden möchten, und drücken Sie dann die Eingabetaste. Dies wird oft verwendet, um zu verursachen yes
um einen Ausgabestream von „Ja“ – oder „Nein“ -Strings zu generieren.
yes yes

yes anything you like

Aber was nützt das?
Die Ausgabe von yes
kann in andere Programme oder Skripte geleitet werden.
Kommt Ihnen das bekannt vor? Sie starten einen langen Prozess und treten zurück, sodass er ausgeführt werden kann. Wenn Sie zu Ihrem Computer zurückkehren, ist der Vorgang überhaupt nicht abgeschlossen. In Ihrer Abwesenheit hat es Ihnen eine Frage gestellt und wartet auf eine Antwort mit „Ja“ oder „Nein“.
Wenn Sie im Voraus wissen, dass alle Ihre Antworten positiv („Ja“ oder „Ja“) oder negativ („Nein“ oder „N“) sein werden, können Sie sie verwenden yes
um diese Antworten für Sie bereitzustellen. Ihr langer Prozess wird dann unbeaufsichtigt bis zum Abschluss ausgeführt yes
Bereitstellung der Antworten auf alle Fragen, die der Prozess stellt.
Verwenden von yes With Scripts
Schauen Sie sich das folgende Bash-Shell-Skript an. (Wir müssen uns vorstellen, dass dies Teil eines viel größeren Skripts ist, dessen Ausführung eine beträchtliche Zeit in Anspruch nehmen wird.)
#!/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
Dieses Skript stellt eine Frage und wartet auf eine Antwort. Der Logikfluss innerhalb des Skripts wird durch die Eingabe des Benutzers bestimmt.
- Ein „Ja“ oder „Y“ zeigt eine positive Antwort an.
- Jede andere Eingabe wird als negative Antwort betrachtet.
- Durch Drücken der Eingabetaste ohne Eingabetext wird nichts ausgeführt.
Um dies zu testen, kopieren Sie das Skript in eine Datei und speichern Sie es unter long_script.sh
. Verwenden chmod
um es ausführbar zu machen.
chmod +x long_script.sh
Führen Sie das Skript mit dem folgenden Befehl aus. Versuchen Sie, „Ja“, „Ja“ und alles andere als Eingabe anzugeben, einschließlich Drücken der Eingabetaste ohne Eingabetext.
./long_script.sh

Bekommen yes
Um unsere Antwort auf die Frage des Skripts zu geben, leiten Sie die Ausgabe von weiter yes
zum Skript.
yes | ./long_script.sh

Einige Skripte sind strenger in ihren Anforderungen und akzeptieren nur das vollständige Wort „Ja“ als positive Antwort. Sie können „Ja“ als Parameter für angeben yes
, wie folgt:
yes yes | ./long_script.sh

Sagen Sie nicht Ja, ohne darüber nachzudenken
Sie müssen sicher sein, dass die Eingabe, die Sie in das Skript oder Programm einspeisen, Ihnen definitiv das erwartete Ergebnis liefert. Um diese Entscheidung treffen zu können, müssen Sie die Fragen kennen und wissen, wie Ihre Antworten lauten sollten.
Die Logik im Skript, Befehl oder Programm entspricht möglicherweise nicht Ihren Erwartungen. In unserem Beispielskript könnte die Frage lauten: „Möchten Sie aufhören? [y,n]. ” Wenn dies der Fall gewesen wäre, hätte eine negative Antwort dem Skript erlaubt, fortzufahren.
Sie sind mit dem Skript, dem Befehl oder dem Programm vertraut, bevor Sie munter pfeifen yes
hinein.
Verwenden von yes With Commands
In den Kinderschuhen, yes
würde mit anderen Linux-Befehlen verwendet werden. Seitdem haben die meisten dieser anderen Linux-Befehle ihre eigene Art, ohne menschliche Interaktion ausgeführt zu werden. yes
ist nicht mehr erforderlich, um dies zu erreichen.
Nehmen wir den Ubuntu-Paketmanager apt-get
als Beispiel. Um eine Anwendung zu installieren, ohne nach der Installation „y“ drücken zu müssen, yes
wäre wie folgt verwendet worden:
yes | sudo apt-get install fortune-mod

Das gleiche Ergebnis kann mit dem erzielt werden -y
(angenommen ja) Option in apt-get
::
sudo apt-get -y install fortune-mod

Das wirst du sehen apt-get
fragte nicht einmal wie üblich: „Willst du weitermachen? [Y/n]Frage. Es wurde nur angenommen, dass die Antwort „Ja“ wäre.
Bei anderen Linux-Distributionen ist die Situation dieselbe. Unter Fedora hätten Sie diese Art von Paketmanager-Befehl einmal verwendet:
yes | yum install fortune-mod
Das dnf
Paketmanager wurde ersetzt yum
und dnf
hat sein eigenes -y
(Ja annehmen) Option.
dnf -y install fortune-mod
Gleiches gilt für cp
, fsck
, und rm
. Diese Befehle haben jeweils ihre eigenen -f
(Kraft) oder -y
(Ja annehmen) Optionen.
So scheint es auch yes
wurde verbannt, nur mit Skripten zu arbeiten? Nicht ganz. Es gibt noch ein paar Tricks im alten Hund.
Einige weitere ja Tricks
Sie können verwenden yes
mit einer Folge von Ziffern generiert von seq
um eine Schleife von wiederholten Aktionen zu steuern.
Dieser Einzeiler gibt die generierten Ziffern an das Terminalfenster weiter und ruft dann auf sleep
für eine Sekunde.
Anstatt die Ziffern einfach im Terminalfenster wiederzugeben, können Sie einen anderen Befehl oder ein anderes Skript aufrufen. Dieser Befehl oder dieses Skript muss nicht einmal die Ziffern verwenden und dient nur dazu, jeden Zyklus der Schleife zu starten.
yes "$(seq 1 20)" | while read digit; do echo digit; sleep 1; done

Manchmal ist es nützlich, eine große Datei zum Testen zu haben. Vielleicht möchten Sie die Verwendung des Befehls zip üben oder eine umfangreiche Datei zum Testen von FTP-Uploads haben.
Mit können Sie schnell große Dateien generieren yes
. Sie müssen ihm lediglich eine lange Textfolge geben, um damit zu arbeiten, und die Ausgabe in eine Datei umleiten. Mach keinen Fehler; Diese Dateien werden schnell wachsen. Drücken Sie innerhalb weniger Sekunden Strg + C.
yes long line of meaningless text for file padding > test.txt
ls -lh test.txt
wc test.txt

Die hier generierte Datei dauerte auf der Testmaschine, mit der dieser Artikel recherchiert wurde, ungefähr fünf Sekunden. ls
berichtet, dass es 557 MB groß ist, und wc
Sagen Sie uns, es sind 12,4 Millionen Zeilen darin.
Wir können die Größe der Datei durch Einschließen begrenzen head
in unserer Befehlszeichenfolge. Wir geben an, wie viele Zeilen in die Datei aufgenommen werden sollen. Das -50
meint head
lässt nur 50 Zeilen durch die test.txt
Datei.
yes long line of meaningless text for file padding | head -50 > test.txt

Sobald es 50 Zeilen in der test.txt
Datei wird der Prozess gestoppt. Sie müssen nicht Strg + C verwenden. Es kommt von sich aus anmutig zum Stillstand.
wc
meldet, dass die Datei genau 50 Zeilen enthält, 400 Wörter und 2350 Byte groß ist.
Auch wenn es immer noch nützlich ist, um Antworten in lang laufende Skripte (und einige andere Tricks) einzugeben, ist die yes
Befehl wird nicht Teil Ihres täglichen Befehls-Toolkits sein. Aber wenn Sie es brauchen, werden Sie feststellen, dass es einfach ist – und das alles in sechs Zeilen goldenen Codes.