Cuando el código de estado es inútil, ¿hay alguna forma de construir una tubería basada en la salida de stdout?
Prefiero que la respuesta no aborde el caso de uso, sino la pregunta en el ámbito de las secuencias de comandos de shell. Lo que intento hacer es encontrar el paquete más específico disponible en el repositorio adivinando el nombre en función de los códigos de país e idioma.
Toma por ejemplo esto,
$PACKAGE1=hunspell-en-zz$PACKAGE2=hunspell-en
La primera suposición es más apropiada pero puede no existir. En este caso, quiero devolver hunspell-en( $PACKAGE2) porque la primera opción hunspell-en-zz( $PACKAGE1) no existe.
tuberías de apt-cache
El comando apt-cachedevuelve el éxito (que se define como shell como código de salida cero) siempre que el comando pueda ejecutarse (desde los documentos de apt-cache)
apt-cache devuelve cero en operación normal, decimal 100 en error.
Eso hace que usar el comando en una tubería sea más difícil. Normalmente, espero que el equivalente de búsqueda de paquetes de un 404 produzca un error (como sucedería con curlo wget). Quiero buscar para ver si existe un paquete, y si no, recurrir a otro paquete si existe .
Esto no devuelve nada, ya que el primer comando devuelve el éxito (por lo que el rhs ||nunca se ejecuta)
apt-cache search hunspell-en-zz || apt-cache search hunspell-en
apt-cache search con dos argumentos
Esto no devuelve nada, ya que apt-cachesus argumentos Y
apt-cache search hunspell-en-zz hunspell-en
De los documentos de apt-cache
Se pueden usar argumentos separados para especificar múltiples patrones de búsqueda que se unen.
Entonces, como uno de esos argumentos claramente no existe, esto no devuelve nada.
La pregunta
¿Cuál es el idioma de shell para manejar convenciones como las que se encuentran en las apt-cacheque el código de retorno es inútil para la tarea? ¿Y el éxito está determinado solo por la presencia de salida en STDOUT?
Similar a
hacer encontrar falla cuando no se encontró nada
Ambos provienen del mismo problema. La respuesta elegida allí menciona
find -zque lamentablemente no es una solución aplicable aquí y es específica del caso de uso. No se menciona una expresión idiomática o la construcción de una tubería sin usar terminación nula (no es una opción activadaapt-cache)
hunspell-arexisten y no hay paquetes de nombres de países. Necesito encontrar el paquete más preciso para un país e idioma determinados.
findes como apt-cachea este respecto: código de retorno inútil, el éxito se basa en la salida.
-zque, lamentablemente, no es una solución aquí, por lo que el problema específico del caso de uso no es aplicable. Y no se menciona una expresión idiomática o la construcción de una tubería sin usar terminación nula (no es una opción apt-cache)
findser utilizado -print0y muy útil -z. Dado que apt-cache no está dando salida terminada en nulo, no es necesario -z.
hunspell-enexiste? De todos modos, puedes usarapt-cache policyy grep para^$PACKAGENAME:.