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-cache
devuelve 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 curl
o 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-cache
sus 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-cache
que 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 -z
que 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-ar
existen y no hay paquetes de nombres de países. Necesito encontrar el paquete más preciso para un país e idioma determinados.
find
es como apt-cache
a este respecto: código de retorno inútil, el éxito se basa en la salida.
-z
que, 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
)
find
ser utilizado -print0
y muy útil -z
. Dado que apt-cache no está dando salida terminada en nulo, no es necesario -z
.
hunspell-en
existe? De todos modos, puedes usarapt-cache policy
y grep para^$PACKAGENAME:
.