Estoy tratando de contener el alcance de una variable a un shell, y no hacer que los niños lo vean, en zsh. Por ejemplo, escribo esto en .zshrc:
GREP_OPTIONS=--color=always
Pero si ejecuto un script de shell con lo siguiente:
#!/bin/bash
echo $GREP_OPTIONS
El resultado es:
--color=always
mientras quiero que sea nulo (el script de shell anterior no debería ver la variable GREP_OPTIONS en absoluto).
En bash, se puede decir:, export -n GREP_OPTIONS=--color=always
lo que evitará que esto suceda. ¿Cómo logro esto en zsh?
shell-script
zsh
environment-variables
Orejas De Poni
fuente
fuente
export -n
simplemente exporta una variable exportada.Respuestas:
export
en zsh es la abreviatura detypeset -gx
, donde el atributog
significa "global" (en oposición a local a una función) y el atributox
significa "exportado" (es decir, en el entorno). Así:Esto también funciona en ksh y bash.
Si nunca exporta
GREP_OPTIONS
en primer lugar, no necesita exportarlo.También puede usar la forma indirecta y portátil: desarmar una variable no la exporta. En ksh / bash / zsh, esto no funciona si la variable es de solo lectura.
fuente
env -u GREP_OPTIONS your-script
con algunasenv
implementaciones (cualquier shell). O(unset GREP_OPTIONS; exec your-script)
export_all
(-a
)? Pero incluso entoncestypeset +x GREP_OPTIONS
no exportaría la variable. Si no puede encontrar lo que está mal, intente la búsqueda binaria: haga una copia de seguridad de su.zshrc
, elimine la segunda mitad, vea si el problema aún surge, luego agregue el tercer trimestre o reduzca al primer trimestre y repita.Puede usar una función anónima para proporcionar un alcance para la variable. De
man zshall
:Pero aparte de eso, si no está usando
export
en.zshrc
absoluto, la variable solo debería ser visible en su sesión interactiva actual, y no debería exportarse a subcapas.Como terdon explicó en su comentario:
export -n
enbash
solo hace que la propiedad "exportar" se elimine de la variable, por lo que usarexport -n GREP_OPTIONS=--color=always
es equivalente a no usar la exportación en absoluto -GREP_OPTIONS=--color=always
.En otras palabras, para obtener el comportamiento deseado, simplemente no lo use
export
. En cambio, en tu.zshrc
, deberías tenerEso hará que la variable esté disponible para todos los shells (interactivos, sin inicio de sesión) que ejecute, tal como lo desea, pero no se exportará a shells secundarios.
fuente