Script de shell escrito en un shell diferente al que mi shell actual

Si el script de shell es

#!/bin/sh 

Pero el valor de mi $ SHELL es ksh.

¿Hará una diferencia si cambié mi ksh a sh, y luego ejecuté el script? es decir. un script tendrá un comportamiento diferente dependiendo del tipo de shell que lo esté ejecutando.

un script tendrá un comportamiento diferente dependiendo del tipo de shell que lo esté ejecutando.

  • En el sentido de que bash script.sh y ksh script.sh es probable que se comporten de manera diferente, sí. Comúnmente, esa diferencia será que uno de ellos funciona y uno da un error, pero hay una variedad de opciones. Muchos scripts simples tendrán el mismo comportamiento en shells comunes, pero es más probable que los scripts más complejos scopen una de las muchas diferencias entre los lenguajes provistos por diferentes shells.

  • ¿Un script se comportará de manera diferente dependiendo de tu valor de SHELL ? Solo si el script invoca $SHELL sí mismo, o lo testing o usa su valor, directa o indirectamente. Los scripts de shell ordinarios generalmente no lo harán, pero pueden hacerlo.

  • ¿Un script se comportará de manera diferente dependiendo del shell padre desde el cual fue invocado? Muy raramente, el script tendría que hacer un buen trabajo para detectarlo, en la medida en que casi tendría que ser a propósito.


Creo que su caso de uso ejecuta ./script.sh , que es un script sh , desde su caparazón interactivo, que es ksh . Si es así, estamos en el último caso anterior, y el script se comportará casi con security de la misma manera que si estuvieras usando otro intérprete de commands. El sistema siempre iniciará un nuevo process /bin/sh y le indicará que ejecute el script.

No, no hace la diferencia. #!/usr/bin/sh significa "use /usr/bin/sh para interpretar este script de modo que el valor de $SHELL no haga diferencia.