¿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
- el shell ejecuta el programa
exec
, que - 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"