0 votos

Zsh ignora el shebang en macOS Monterey

Problema

En macOS Monterey, un script con un shebang (por ejemplo, #!/bin/sh) no es ejecutado por el intérprete indicado a través de zsh. Por ejemplo, el siguiente script producirá el siguiente resultado:


Script

#!/usr/bin/env bash
echo $SHELL

Resultado

% chmod u+x my_script
% my_script
/bin/zsh

Quiero que mis scripts se ejecuten con bash. Preferiría que se respete el shebang en lugar de cambiar por completo mi shell. ¿Cómo puedo asegurarme de que esto suceda?

Preguntas relacionadas que no responden a la mía:

  1. El shebang no funciona si estás ejecutando el script con '.': No lo estoy
  2. _Ejecuta el script como: bash my_script_: Quiero que respete el shebang, no cambiar mi comportamiento así que necesito revisar cada script antes de ejecutarlo con el shell correcto.
  3. Cambia tu shell a bash: Deseo mantener el shell estándar de macOS.

4voto

siva Puntos 23

Tu script se está ejecutando con bash. $SHELL se establece una vez en la ruta de tu shell de inicio cuando se inicia, no es un valor que cambie dinámicamente para el shell que está ejecutando actualmente el comando que imprime $SHELL.

0 votos

Esto es correcto. Gracias. Aceptaré la respuesta lo antes posible.

0voto

user1934428 Puntos 113

Una gran diferencia es que bash por defecto establece la variable SHELL, pero zsh no lo hace. Por lo tanto, en algunas implementaciones, la configuración del sistema (por ejemplo, a través de /etc/zshenv) establece SHELL como variable de entorno al binario zsh; hasta donde sé, Apple está haciendo esto en MacOS.

bash establecería SHELL en la ruta de su binario, pero solo hace esto si no existe una variable de entorno con ese nombre. Puedes verificar esto (estando en zsh) con

SHELL=foo bash -c 'printenv SHELL'

(unset SHELL; bash -c 'echo $SHELL')

La primera línea imprimirá foo, mientras que la segunda imprimirá algo como /bin/bash.

Por lo tanto, si quieres que bash tenga SHELL configurado, debes desactivarlo en tu zsh antes de ejecutar tu script de bash. Sin embargo, dado que los casos en los que esta variable es realmente necesaria son raros, no creo que valga la pena el esfuerzo.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X