Quando il codice di stato è inutile, c'è comunque modo di costruire una pipeline basata sull'output di stdout?
Preferirei che la risposta non riguardasse il caso d'uso ma la domanda nell'ambito della shell scripting. Quello che sto cercando di fare è trovare il pacchetto più specifico disponibile nel repository indovinando il nome in base ai codici di paese e lingua.
Prendi ad esempio questo,
$PACKAGE1=hunspell-en-zz$PACKAGE2=hunspell-en
La prima ipotesi è più appropriata ma potrebbe non esistere. In questo caso, voglio return hunspell-en( $PACKAGE2) perché la prima opzione hunspell-en-zz( $PACKAGE1) non esiste.
pipeline di apt-cache
Il comando apt-cacherestituisce esito positivo (che è definito dalla shell come codice di uscita zero) ogni volta che il comando è in grado di essere eseguito (dai documenti di apt-cache)
apt-cache restituisce zero durante il normale funzionamento, 100 decimale in caso di errore.
Ciò rende più difficile l'utilizzo del comando in una pipeline. Normalmente, mi aspetto che l'equivalente nella ricerca di pacchetti di un 404 provochi un errore (come accadrebbe con curlo wget). Voglio cercare per vedere se esiste un pacchetto, e in caso contrario ricorrere ad un altro pacchetto se esiste .
Questo non restituisce nulla, poiché il primo comando restituisce successo (quindi rhs nel ||non viene mai eseguito)
apt-cache search hunspell-en-zz || apt-cache search hunspell-en
apt-cache search con due argomenti
Questo non restituisce nulla, poiché apt-cachegli argomenti di AND,
apt-cache search hunspell-en-zz hunspell-en
Dai documenti di apt-cache
Argomenti separati possono essere usati per specificare più schemi di ricerca che sono uniti.
Quindi, poiché uno di questi argomenti chiaramente non esiste, questo non restituisce nulla.
La domanda
Qual è il linguaggio della shell per gestire convenzioni come quelle trovate in apt-cachecui il codice di ritorno è inutile per l'attività? E il successo è determinato solo dalla presenza di output su STDOUT?
Simile a
make find fail quando non è stato trovato nulla
entrambi derivano dallo stesso problema. La risposta scelta menziona
find -zquale soluzione tristemente non è applicabile qui ed è specifica del caso d'uso. Non vi è alcuna menzione di un linguaggio o costruzione di una pipeline senza utilizzare la terminazione null (non un'opzione attivaapt-cache)
hunspell-aresiste e non ci sono pacchetti di nomi di paesi . Devo trovare il pacchetto più accurato per un determinato paese e lingua.
findè proprio come apt-cachesotto questo aspetto: inutile codice di ritorno, il successo si basa sull'output.
-zche purtroppo non è una soluzione qui, quindi il problema specifico del caso d'uso non è applicabile. E non si fa menzione di un linguaggio o della costruzione di una pipeline senza usare la terminazione nulla (non un'opzione attiva apt-cache)
finddi essere usato -print0e così grep -z. Poiché apt-cache non fornisce output con terminazione null, non è necessario -z.
hunspell-enesista? Ad ogni modo, puoi usareapt-cache policye grep per^$PACKAGENAME:.