Saltar al contenido

salir del script de shell desde un subshell

Intenta entender el código correctamente antes de utilizarlo a tu trabajo y si ttienes algo que aportar puedes dejarlo en la sección de comentarios.

Solución:

Podría decidir que el estado de salida 77, por ejemplo, significa salir de cualquier nivel de subcapa, y hacer

set -E
trap '[ "$?" -ne 77 ] || exit 77' ERR

(
  echo here
  (
    echo there
    (
      exit 12 # not 77, exit only this subshell
    )
    echo ici
    exit 77 # exit all subshells
  )
  echo not here
)
echo not here either

set -E en combinación con ERR trampas es un poco como una versión mejorada de set -e ya que le permite definir su propio manejo de errores.

En zsh, las trampas ERR se heredan automáticamente, por lo que no necesita set -Etambién puede definir trampas como TRAPERR() funciones y modificarlas mediante $functions[TRAPERR]me gusta functions[TRAPERR]="echo was here; $functions[TRAPERR]"

pudo matar el caparazón original (kill $$) antes de llamar exit, y eso probablemente funcionaría. Pero:

  • me parece bastante feo
  • se romperá si tiene una segunda subcapa allí, es decir, use una subcapa dentro de una subcapa.

En su lugar, puede usar una de las varias formas de devolver un valor en las preguntas frecuentes de Bash. La mayoría de ellos no son tan buenos, desafortunadamente. Es posible que se quede atascado comprobando errores después de cada llamada de función (-e tiene muchos problemas). O eso, o cambiar a Perl.

Como alternativa a kill $$también puedes probar kill 0funcionará en el caso de subcapas anidadas (todas las personas que llaman y el proceso lateral recibirán la señal)… pero sigue siendo brutal y feo.

Al final de la post puedes encontrar las referencias de otros usuarios, tú aún tienes la libertad de insertar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *