Wenn der Statuscode unbrauchbar ist, gibt es überhaupt eine Möglichkeit, eine Pipeline basierend auf der Ausgabe von stdout zu erstellen?
Ich würde es vorziehen, wenn die Antwort nicht den Anwendungsfall, sondern die Frage im Rahmen des Shell-Scripting anspricht. Ich versuche, das spezifischste im Repository verfügbare Paket zu finden, indem ich den Namen basierend auf den Länder- und Sprachcodes errate.
Nehmen Sie zum Beispiel dies,
$PACKAGE1=hunspell-en-zz
$PACKAGE2=hunspell-en
Die erste Vermutung ist angemessener, existiert aber möglicherweise nicht. In diesem Fall möchte ich hunspell-en
( $PACKAGE2
) zurückgeben, da die erste Option hunspell-en-zz
( $PACKAGE1
) nicht vorhanden ist.
Pipelines von apt-cache
Der Befehl apt-cache
gibt Erfolg zurück (der von der Shell als Exit-Code Null definiert wird), wenn der Befehl ausgeführt werden kann (aus den Dokumenten von apt-cache
).
apt-cache gibt bei normalem Betrieb Null zurück, bei Fehler dezimal 100.
Dies erschwert die Verwendung des Befehls in einer Pipeline. Normalerweise erwarte ich, dass das Paket-Suchäquivalent eines 404 zu einem Fehler führt (wie es bei curl
oder passieren würde wget
). Ich möchte suchen, ob ein Paket vorhanden ist, und wenn nicht, auf ein anderes Paket zurückgreifen, wenn es vorhanden ist .
Dies gibt nichts zurück, da der erste Befehl Erfolg zurückgibt (so dass die rhs in ||
nie ausgeführt werden)
apt-cache search hunspell-en-zz || apt-cache search hunspell-en
apt-cache search
mit zwei Argumenten
Dies gibt nichts zurück, da apt-cache
UND seine Argumente,
apt-cache search hunspell-en-zz hunspell-en
Aus den Dokumenten von apt-cache
Separate Argumente können verwendet werden, um mehrere Suchmuster anzugeben, die zusammengefügt werden.
Da eines dieser Argumente eindeutig nicht existiert, gibt dies nichts zurück.
Die Frage
Wie lautet die Shell-Sprache, um Konventionen wie die zu behandeln, bei apt-cache
denen der Rückkehrcode für die Aufgabe unbrauchbar ist? Und Erfolg wird nur durch das Vorhandensein von Ausgabe auf STDOUT bestimmt?
Ähnlich zu
make find schlägt fehl, wenn nichts gefunden wurde
beide haben das gleiche Problem. Die dort gewählte Antwort erwähnt,
find -z
welche Lösung hier leider nicht anwendbar und anwendungsfallspezifisch ist. Es wird keine Redewendung erwähnt oder eine Pipeline ohne Verwendung der Nullterminierung erstellt (keine Option aktiviertapt-cache
).
hunspell-ar
existieren und es keine Ländernamenpakete gibt. Ich muss das genaueste Paket für ein bestimmtes Land und eine bestimmte Sprache finden.
find
ist genau wie apt-cache
in dieser Hinsicht - nutzloser Rückkehrcode, Erfolg basiert auf Ausgabe.
-z
die hier leider keine Lösung darstellen, sodass das anwendungsfallspezifische Problem nicht anwendbar ist. Und es gibt keine Erwähnung einer Redewendung oder des Aufbaus einer Pipeline ohne Verwendung der Nullterminierung (keine Option apt-cache
)
find
, dass man es verwendet -print0
und damit grep -z
. Da apt-cache keine nullterminierte Ausgabe liefert, benötigen Sie keine -z
.
hunspell-en
es das gibt? Wie auch immer, Sie können verwendenapt-cache policy
und grep für^$PACKAGENAME:
.