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-cachegibt 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 curloder 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-cacheUND 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-cachedenen 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 -zwelche 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-arexistieren und es keine Ländernamenpakete gibt. Ich muss das genaueste Paket für ein bestimmtes Land und eine bestimmte Sprache finden.
findist genau wie apt-cachein dieser Hinsicht - nutzloser Rückkehrcode, Erfolg basiert auf Ausgabe.
-zdie 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 -print0und damit grep -z. Da apt-cache keine nullterminierte Ausgabe liefert, benötigen Sie keine -z.
hunspell-enes das gibt? Wie auch immer, Sie können verwendenapt-cache policyund grep für^$PACKAGENAME:.