GNU/Linux >> Tutoriales Linux >  >> Linux

¿Ejecutar “exec Echo Some; Prueba de eco” en Bash ¿Nunca imprime “alguna prueba”?

¿Ejecutar exec echo "some "; echo "test" en bash nunca imprime "alguna prueba"?

Buscaría la confirmación de esta pregunta, ya que estoy escribiendo un pequeño script de shell y me gustaría que no continuara después del exec se ha llamado el comando.

Creo que no tendría que preocuparme, según tengo entendido, después de consultar:

  • man 3 exec
  • man 1p exec

Los scripts de shell, cuando son ejecutados por el shell, harán

  1. el shell ejecuta el programa exec , que
  2. usa el exec*** llamadas al sistema familiar que reemplazan el shell/bash que ha estado ejecutando el script, por este impedir otras acciones del shell (que fue "reemplazado")

Como se indicó anteriormente, el objetivo principal de esta pregunta es buscar la confirmación de mi razonamiento para evitar que algo en el script ocurra después de la ejecución (como echo test ) sería ejecutado.

Agradecería una respuesta general (POSIX), en la medida de lo posible, pero por si hay particularidades lo que más me interesa es GNU/Linux y GNU/Bash

Respuesta aceptada:

exec siempre termina el guión si ejecuta un comando y lo hace con éxito (no relacionado con el código de salida del comando sino con su inicio).

exec se puede ejecutar sin un comando de una manera muy útil:para redirigir permanentemente los descriptores de archivos:

exec 3>/path/to/file

Si no se puede iniciar el comando, el comportamiento del shell depende de la configuración. bash sale por defecto.

Puede ser mejor para ti usar una función en su lugar:

safe_exec () {
    cmd="$1"
    if test -z "$cmd" || ! test -f "$cmd" || ! test -x "$cmd"; then
        exit 1
    else
        exec "[email protected]"
    fi
}

safe_exec echo "some "; echo "test"

Linux
  1. Evitar que un script bash se ejecute simultáneamente

  2. ¿Qué hace Exec 3?

  3. ¿Qué significa -s y [[]] en una condición If en Bash?

  4. ¿Qué hace Echo $? ¿¿Hacer??

  5. ¿Cómo pruebo si una variable es un número en Bash?

Bash Scripting - Declaraciones condicionales

Me gustaría almacenar todos los argumentos de la línea de comandos en un script Bash en una sola variable

Imprima la salida de la declaración cat en el bucle de script bash

En bash, ¿hay alguna forma de repetir/imprimir la última salida estándar? ¿Hay alguna variable a la que esté asignada la salida estándar?

¿Qué hace 'bash -c'?

¿Cómo prueba bash 'falso'?