Cómo los códigos de salida de Linux lo ayudan a escribir scripts robustos

Síntesis

  • Cada comando Linux devuelve un código de salida, con 0 que indica el éxito y los títulos distintos de cero que indican equivocación.

  • ¿Puedes usar el $? Variable para ingresar al código de salida y al flujo del software de control en los scripts.

  • Tenga cuidado con los códigos de salida no convencionales que varían entre los comandos, como la diff y el rizo.

Cada comando de Linux imprimirá mensajes de error si equivocación, pero esta información es difícil de echarse en brazos. Sus scripts deben utilizar los códigos de salida para ser lo más robustos posible.

¿Qué son los códigos de salida?

Cuando ejecuta un comando Linux, puede equivocarse. Las cosas pueden salir mal por varias razones, pero generalmente verá un mensaje explicando por qué:

Un mensaje de error de Linux desde la lectura del comando LS "El fichero o directorio no existe."

El mensaje de error que ve aparece en Stderr, una transmisión diferente de StDout, que le permite aislar errores de la salida esperada. Como heredero, una descripción del error debe ser informativo, pero los scripts y otros procesos automatizados deben enterarse sobre los errores de forma más confiable.

Relacionado

¿Qué son Stdin, Stdout y Stderr en Linux?

Mistificado por Stdin, Stdout y Stderr? Aprenda a usarlos en sus scripts de Linux.

Adyacente con los mensajes de error legibles, cada comando asimismo devuelve un código de salida. Este es un número entre 0 y 255 que indica si el comando falló o tuvo éxito. Por defecto, el COE de salida está oculto, pero su shell proporciona golpe a este valía en la variable distinto, ¿$?

El comando LS devuelve un estado de salida 0 en el éxito y un 1 en la falla.

Tenga en cuenta que un valía 0 indica éxito y un valía diferente de cero significa equivocación. Puede realizar este valía en la ristra de comando, interrogarlo en un script y usarlo para controlar el flujo de sus programas.

¿Cómo uso los códigos de salida?

En el ejemplo precedente, LS devolvió un código de salida 0 cuando tuvo éxito y un 1 cuando su argumento no era un archivo válido. Esto puede parecer contradictorio, y contradice los lenguajes de programación típicos que tratan a 0 como un valía espurio y 1 como serio. Sin bloqueo, esta configuración permite un único valía de éxito universal y un amplio rango de títulos para representar diferentes tipos de error.

Así como hacer eco de los $? Variable Para realizar manualmente el estado de salida, puede usarlo con una instrucción IF condicional. Si el comando devuelve un estado de salida 0, la confesión ejecutará el retiro asociado. De lo contrario, si hay uno, ejecutará el sillar de lo otro. Por ejemplo:

        if command; then echo "command succeeded"; else echo "command failed"; fi

Puede usar esta construcción en un script de shell, donde es un poco más tratable formatear para la legibilidad:

        if command
    then echo "command succeeded"
    else echo "command failed"
fi

Este es el equivalente de:

        command

if ( $? -eq 0 )
    then echo "command succeeded"
    else echo "command failed"
fi

La interpretación más larga utiliza la sintaxis de Bracket Square para probar el valía de $?, Pero generalmente es más tratable probar el valía directamente, como en el primer caso. ¿Recuerdas eso $? Siempre representa el código de salida del postrero comando, así que tenga cuidado. ¿Puede tener la tentación de crear el valía de $? para la depuración, por ejemplo

        command

echo "command returned exit code:" $?

if ( $? -eq 0 )
    then echo "command succeeded"
    else echo "command failed"
fi

Pero, en el punto del cheque de condición, ¿$? tendrá el valía del estado de salida de Echo, que casi se garantiza que es 0. Para evitar esto, pruebe el comando directamente en condicional o almacene el valía de $? en una variable.

Relacionado

Cómo usar las declaraciones BASH IF (con 4 ejemplos)

La confesión IF es la forma más tratable de explorar la ejecución condicional en los scripts bash.

¿Qué más hay que enterarse sobre el estado de salida?

Los códigos de salida son asaz simples, siguiendo el principio de Unix, y esto es parte de su poder. Pero hay algunos gotchas y casos excepcionales que debe tener en cuenta.

Códigos de salida de su caparazón

Su shell usará códigos de salida incluso cuando el comando que escriba no se ejecuta correctamente. Por ejemplo, ZSH y BASH usan 127 si no se encuentra el comando y 126 si el comando no es ejecutable:

Una sesión de shell que muestra un código de salida 127 para un comando inexistente y un código 126 para un comando que no se puede ejecutar.

Códigos de salida no convencionales

Algunos comandos doblan sutilmente las reglas del estado de salida; En verdad son solo convenciones, de todos modos. Por ejemplo, DIFF utiliza un valía de 0 para significar “sin diferencias”, un valía de 1 para significar “diferencias” y un valía de 2 para representar un error:

Ejemplo de códigos de salida de Diff.

Esto puede confundir el significado de los condicionales; Por ejemplo:

        if diff file1 file2; then
    echo these files are the same!
fi

El comando curl asimismo es un poco poco intuitivo. Puede esperar que CURL noticia un error HTTP, como un 404 para una URL inexistente, como un código de estado diferente de cero, pero no lo hace:

Los códigos de salida de Curl que muestran que el estado HTTP no se refleja de forma predeterminada.

Puede usar la opción -f (-fail) para hacer que Curl se comporte de forma diferente, devolviendo un código de salida de 22 en la equivocación:

El comando CURL informa un error HTTP a través de un código de salida con la opción -f.

Sin bloqueo, tenga en cuenta que esto no está resguardado al 100% y algunos errores HTTP, incluidos los que requieren autenticación, aún devolverán un código de salida 0.

Usando el estado de salida en una sujeción de comando

Uno de los mejores atajos de estado de salida ocurre sin que incluso necesite pensar en ello. Aquí hay un ejemplo simple:

        ls program && ./program && echo success || echo epic fail

El && y || Los operadores lógicos le permiten ejecutar más de un comando basado en el estado de salida de otros. Son similares a los operadores correspondientes en la mayoría de los lenguajes de programación, pero respetan la convención del código de salida. El cámara && ejecutará el comando a su derecha solo si el comando a su izquierda devuelve un estado de salida 0. El || El cámara ejecutará el comando a su derecha solo si el comando a su izquierda equivocación con un estado diferente de cero.

Una cadena de comandos que usan operadores lógicos para probar los códigos de salida.

Se produce un caso muy popular cuando construye software desde cero, utilizando esta prescripción:

        ./configure && make && make install
    

Las tres partes de este comando hacen lo posterior:

  • ./Configure ejecuta un script circunscrito que inspecciona su entorno y genera un archivo de make.

  • Make Ejecutar el software Make y construye el software, utilizando MakeFile.

  • Haga que la instalación de copias sea ejecutable generado a una ubicación aceptablemente conocida como/usr/circunscrito/bin.

Si alguna parte de este proceso equivocación, se detendrá inmediatamente sin intentar el resto.

Los comandos verdaderos y falsos

Su sistema Linux incluye dos comandos curiosos: Definitivo y Infiel. Cada uno de estos no hace falta, excepto para devolver un código de salida apropiado: 0 y 1 respectivamente:

Los comandos verdaderos y falsos que devuelven los códigos de salida 0 y 1 respectivamente.

Puede que no parezcan muy efectos, pero estos comandos son efectos para las pruebas y para algunas tareas de secuencias de comandos. Puede usar serio en una confesión de tiempo para crear un onda infinito:

        while true
do
    echo “running until you ^c”
    sleep 10
done

Igualmente puede usarlos cercano con operadores lógicos para alterar el comportamiento del comando. Por ejemplo, puede evitar que se ejecute una sujeción de comando larga:

        false && (none || of-these && commands || will-run)

O puede presionar a una sujeción de comando a continuar ejecutándose, incluso si un comando equivocación:

        cat file-that-may-not-exist | true && echo done

Devolver un código de salida de sus propios scripts

Probablemente haya usado el comando de salida ayer, para dejar su terminal. Técnicamente, renuncia a su caparazón y esto significa que asimismo puede usarlo para detener un script de shell. Por defecto, sus scripts saldrán con el mismo código que el postrero comando:

Un script de shell que devuelve el código de salida de su último comando.

Pero puede cambiar el código de salida pasando un parámetro aritmético al comando de salida:

        exit number

Su script ahora saldrá con el código de estado que suministró, y puede usarlo para comunicar diferentes condiciones de error de su software a otros.


Una vez que sepa sobre ellos, los comandos de salida son fáciles de usar. Incluso puede usarlos sin pensar en realidad en ello, pero cuando se comercio de secuencias de comandos, asegúrese de usar los códigos de salida adecuadamente.

Related Posts

Meta está utilizando su tecnología de detección de momento de IA para mezclar más usuarios jóvenes en cuentas adolescentes

Meta dice Está haciendo más para cerciorarse de que la anciano cantidad posible de usuarios más jóvenes esté utilizando que se haya implementado para Instagram, Facebook y Messenger. A partir…

Semanas finales para afianzar su mesa de exhibición en las sesiones: AI

¡La cuenta regresiva es vivo! Tablas de exhibición para Sesiones de TechCrunch: AI casi se han ido, y la data techo del 9 de mayo se está cerrando rápidamente. Si…

Leave a Reply

Your email address will not be published. Required fields are marked *

You Missed

Recuperando motos retenidas durante SS2025 – Remolacha

Recuperando motos retenidas durante SS2025 – Remolacha

OMSA transportará a usuarios del Teleférico de Santiago – Remolacha

OMSA transportará a usuarios del Teleférico de Santiago – Remolacha

Meta está utilizando su tecnología de detección de momento de IA para mezclar más usuarios jóvenes en cuentas adolescentes

Meta está utilizando su tecnología de detección de momento de IA para mezclar más usuarios jóvenes en cuentas adolescentes

Xin Ke Yuan Steel es investigada tras terremoto en Birmania

Xin Ke Yuan Steel es investigada tras terremoto en Birmania

Semanas finales para afianzar su mesa de exhibición en las sesiones: AI

Semanas finales para afianzar su mesa de exhibición en las sesiones: AI

Erick Ortiz cuestiona razones detrás del estancamiento del Código Procesal Penal

Erick Ortiz cuestiona razones detrás del estancamiento del Código Procesal Penal