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=alwayslo que evitará que esto suceda. ¿Cómo logro esto en zsh?
shell-script
zsh
environment-variables
Orejas De Poni
fuente
fuente

export -nsimplemente exporta una variable exportada.Respuestas:
exporten zsh es la abreviatura detypeset -gx, donde el atributogsignifica "global" (en oposición a local a una función) y el atributoxsignifica "exportado" (es decir, en el entorno). Así:Esto también funciona en ksh y bash.
Si nunca exporta
GREP_OPTIONSen 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-scriptcon algunasenvimplementaciones (cualquier shell). O(unset GREP_OPTIONS; exec your-script)export_all(-a)? Pero incluso entoncestypeset +x GREP_OPTIONSno 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
exporten.zshrcabsoluto, 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 -nenbashsolo hace que la propiedad "exportar" se elimine de la variable, por lo que usarexport -n GREP_OPTIONS=--color=alwayses 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