Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

442
Vistas
Scripts de shell de Unix: pasar opciones de shell (-x, etc.) a scripts anidados

¿Cómo puedo ejecutar scripts de shell anidados con la misma opción? Por ejemplo,

parent.sh

 #!/bin/sh ./child.sh

child.sh

 #!/bin/sh ls

¿Cómo puedo modificar parent.sh para que cuando lo ejecute con sh -x parent.sh , la opción -x también sea efectiva en child.sh y la ejecución de ls se muestre en mi consola?

Estoy buscando una solución portátil que sea efectiva para situaciones excepcionales, como usuarios del sistema con /bin/false como shell registrado. ¿Será de alguna ayuda la variable de entorno $SHELL ?

Aclaración: a veces quiero llamar a parent.sh con -x , a veces con -e , dependiendo de la situación. Entonces, la solución no debe implicar codificar las banderas.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Si usa bash , puedo recomendar lo siguiente:

 #!/bin/bash export SHELLOPTS ./child.sh

Puede propagar tantas veces como necesite, también puede usar echo $SHELLOPTS en cada secuencia de comandos en la línea para ver qué está sucediendo y cómo se propagan las opciones si necesita comprenderlo mejor.

Pero para /bin/sh fallará con /bin/sh: SHELLOPTS: readonly variable de solo lectura debido a cómo se aplica POSIX en /bin/sh en varios sistemas, más información aquí: https://lists.gnu.org/archive/ html/bug-bash/2011-10/msg00052.html

over 4 years ago · Santiago Trujillo Denunciar

0

parece un truco y parece que no es la mejor manera.
Pero hará exactamente lo que quieras.

Una de las formas en que puede hacerlo es crear alias para crear envoltorios para sh :

 alias saveShell='cp /bin/sh $some_safe_place' alias shx='cp $some_safe_place /bin/x_sh; rm /bin/sh; echo "/bin/x_sh -x $@" > /bin/sh; chmod 755 /bin/sh ' alias she='cp $some_safe_place /bin/e_sh; rm /bin/sh; echo "/bin/e_sh -e $@" > /bin/sh; chmod 755 /bin/sh ' alias restoreShell='cp $some_safe_place /bin/sh'

Cómo utilizar:
ejecute saveShell y luego use shx o she , si cambiaría -x por -e , ejecute restoreShell y luego ejecute shx o she ejecute el script como de costumbre sh ./parent.sh

TENGA MUCHO CUIDADO CON EL MOVIMIENTO DE SH

Otra solución reemplaza #!/bin/sh a #!/bin/sh -x o #!/bin/sh -e con sed en todos los archivos sh antes de ejecutar el script.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda