Esto no tiene nada que ver con las opciones de la cáscara. Más bien, depende de lo que shebang que tiene en su archivo ejecutable.
Cuando se ejecuta un script como ejecutable (en lugar de source
-o ejecutándolo como una función), se ejecuta en un sub-shell separado y no en su shell de nivel superior. Un sub-shell hereda el entorno de su padre (es decir, export
ed), pero no las opciones del shell. En cambio, el shebang dicta en qué shell se ejecuta y con qué opciones.
Si el tinglado es #!/bin/zsh
se iniciará un sub-shell de Zsh con las opciones por defecto, y luego leerá los comandos de /etc/zshenv
y $ZDOTDIR/.zshenv
, y luego desde su script.
Asimismo, si el tinglado es #!/bin/bash
, su script se ejecutará realmente en Bash, y no en Zsh.
Por último, si el tinglado es #!/bin/sh
depende de tu sistema operativo. En MacOS, hay un enlace simbólico /private/var/select/sh
que apunta al ejecutable del shell a utilizar cuando el shebang es #!/bin/sh
. (Tipo man 1 sh
para más información). Por defecto, ese shell es Bash, y no Zsh, incluso si ha cambiado su shell de inicio de sesión a Zsh. La única manera de cambiarlo es cambiar ese enlace simbólico.
Pero incluso si usted hace /private/var/select/sh
apunta al ejecutable de Zsh, si ejecuta su script con un #!/bin/sh
shebang, Zsh no se ejecutará en "modo nativo". En su lugar, se ejecutará en sh
modo de emulación, que alterna una serie de opciones que son significativamente diferente de los valores por defecto de Zsh .
Los paréntesis son sintaxis básica de glob en Zsh . Sin embargo, no están en Bash. Así que, mi suposición es que tu script se está ejecutando en Bash, por el shebang.
Así que, en fin, resumiendo: Ahórrate la molestia y no ejecutes tu script como un ejecutable. Más bien, lo que suele ser más conveniente en Zsh, es añadir el directorio padre de tu script a tu $fpath
y luego autoload
su script como una función .