So verwenden Sie den yes-Befehl unter Linux

Der Befehl yes scheint zu einfach, um von praktischem Nutzen zu sein, aber in diesem Tutorial zeigen wir Ihnen seine Anwendung und wie Sie von seiner aufgestauten Positivität unter Linux und macOS profitieren können.

Der Ja-Befehl

Der Befehl yes ist einer der einfachsten Befehle in 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—beträgt nur sechs Zeilen Code.

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?

Ohne Befehlszeilenparameter verwendet, verhält sich der Befehl yes so, als ob Sie immer wieder „y“ eingeben und die Eingabetaste drücken würden. Sehr schnell. Dies wird so lange fortgesetzt, bis Sie Strg + C drücken, um es zu unterbrechen.

yes

Tatsächlich kann yes verwendet werden, um jede beliebige Nachricht wiederholt zu generieren. Geben Sie einfach Ja, ein Leerzeichen und die Zeichenfolge ein, die Sie verwenden möchten, und drücken Sie dann die Eingabetaste. Dies wird häufig verwendet, um zu veranlassen, dass yes einen Ausgabestrom von „yes“- oder „no“-Strings generiert.

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, treten zurück und lassen ihn laufen. Wenn Sie zu Ihrem Computer zurückkehren, ist der Vorgang noch nicht abgeschlossen. In Ihrer Abwesenheit hat es Ihnen eine Frage gestellt und wartet auf eine „Ja“- oder „Nein“-Antwort.

Wenn Sie im Voraus wissen, dass alle Ihre Antworten positiv („ja“ oder „j“) oder negativ („nein“ oder „n“) sein werden, können Sie diese Antworten mit „ja“ für Sie bereitstellen. Ihr langer Prozess wird dann unbeaufsichtigt bis zum Abschluss durchlaufen, wobei Ja die Antworten auf alle Fragen liefert, die der Prozess stellt.

  So verwenden Sie den ar-Befehl von Linux zum Erstellen statischer Bibliotheken

Ja mit Skripten verwenden

Sehen 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 logische Fluss innerhalb des Skripts wird durch die Eingaben des Benutzers bestimmt.

Ein „ja“ oder „j“ weist auf eine positive Antwort hin.
Jede andere Eingabe gilt als negative Antwort.
Das Drücken der Eingabetaste ohne Texteingabe bewirkt nichts.

Um dies zu testen, kopieren Sie das Skript in eine Datei und speichern Sie es als long_script.sh. Verwenden Sie 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“, „j“ und alles andere als Eingabe bereitzustellen, einschließlich der Eingabetaste ohne Eingabetext.

./long_script.sh

Um unsere Antwort auf die Frage des Skripts mit yes zu erhalten, leiten Sie die Ausgabe von yes an das Skript weiter.

yes | ./long_script.sh

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

yes yes | ./long_script.sh

Sag nicht ja, ohne es zu überdenken

Sie müssen sicher sein, dass die Eingaben, die Sie in das Skript oder Programm eingeben, definitiv das Ergebnis liefern, das Sie erwarten. Um diese Entscheidung treffen zu können, müssen Sie die Fragen und Ihre Antworten kennen.

  So verwenden Sie Deluge WebUI unter Linux

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 ermöglicht, fortzufahren.

Sie müssen mit dem Skript, dem Befehl oder dem Programm vertraut sein, bevor Sie unbekümmert Ja eingeben.

Ja mit Befehlen verwenden

In den Kinderschuhen wurde yes mit anderen Linux-Befehlen verwendet. Seitdem laufen die meisten dieser anderen Linux-Befehle ohne menschliche Interaktion. ja ist dafür nicht mehr erforderlich.

Nehmen wir als Beispiel den Ubuntu-Paketmanager apt-get. Um eine Anwendung zu installieren, ohne nach der Hälfte der Installation „y“ drücken zu müssen, wäre yes wie folgt verwendet worden:

yes | sudo apt-get install fortune-mod

Das gleiche Ergebnis kann mit der Option -y (ja) in apt-get erreicht werden:

sudo apt-get -y install fortune-mod

Sie werden sehen, dass apt-get nicht einmal die übliche Frage „Möchten Sie fortfahren? [Y/n]“ Frage. Es wurde einfach angenommen, dass die Antwort „Ja“ lautet.

Bei anderen Linux-Distributionen ist die Situation die gleiche. Unter Fedora hätten Sie diese Art von Paketmanagerbefehl auf einmal verwendet:

yes | yum install fortune-mod

Der dnf-Paketmanager hat yum ersetzt und dnf hat seine eigene Option -y (angenommen ja).

dnf -y install fortune-mod

Das gleiche gilt für cp, fsck und rm. Diese Befehle haben jeweils ihre eigenen Optionen -f (force) oder -y (angenommen ja).

Scheint es also so zu sein, dass ja nur mit Skripten gearbeitet wurde? Nicht ganz. Es gibt noch ein paar Tricks beim alten Hund.

Einige weitere ja Tricks

Sie können yes mit einer von seq generierten Ziffernfolge verwenden, um eine Schleife wiederholter Aktionen zu steuern.

Dieser Einzeiler sendet die generierten Ziffern an das Terminalfenster und ruft dann für eine Sekunde den Ruhezustand auf.

Anstatt die Ziffern einfach an das Terminalfenster zu senden, können Sie einen anderen Befehl oder ein Skript aufrufen. Dieser Befehl oder dieses Skript muss nicht einmal die Ziffern verwenden, und sie sind nur da, um 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 Zip-Befehls üben oder eine umfangreiche Datei zum Testen von FTP-Uploads haben.

  Die 5 besten IRC-Clients für Linux

Mit yes können Sie schnell große Dateien generieren. Alles, was Sie tun müssen, ist, ihm eine lange Textkette zu geben, mit der Sie arbeiten können, und die Ausgabe in eine Datei umleiten. Mach keinen Fehler; diese Dateien werden schnell wachsen. Seien Sie bereit, innerhalb weniger Sekunden Strg+C zu drücken.

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

Die hier generierte Datei dauerte auf dem Testcomputer, mit dem dieser Artikel recherchiert wurde, etwa fünf Sekunden. ls berichtet, dass es 557 MB groß ist, und WC sagt uns, dass es 12,4 Millionen Zeilen enthält.

Wir können die Größe der Datei begrenzen, indem wir head in unsere Befehlszeichenfolge aufnehmen. Wir sagen ihm, wie viele Zeilen in die Datei aufgenommen werden sollen. -50 bedeutet, dass head nur 50 Zeilen bis zur Datei test.txt durchlässt.

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

Sobald die Datei test.txt 50 Zeilen enthält, wird der Vorgang beendet. Sie müssen nicht Strg+C verwenden. Es kommt von selbst zu einem anmutigen Halt.

wc meldet, dass die Datei genau 50 Zeilen enthält, 400 Wörter und 2350 Byte groß ist.

Obwohl es immer noch nützlich ist, um Antworten in langlaufende Skripte einzugeben (und ein paar andere Tricks), wird der Befehl yes kein 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.