2012-04-27 3 views
1

je le script suivant dans ~/bin/afin de remplacer la commande par défaut pour gnome-terminal:variable d'environnement Bash héritée par enfant sans « exportation »

#!/usr/bin/env bash 
XDG_CONFIG_HOME=~/.config/darkthemesettings /usr/bin/gnome-terminal 

Je suis en train de faire la variable XDG_CONFIG_HOME obtenir seulement vu par gnome-terminal, mais dans le terminal qui apparaît, si je lance un autre programme, la variable est également définie dans ce programme. Exécution echo $XDG_CONFIG_HOME du terminal donne /home//.config/darkthemesettings

Je compris que si l'on définit une variable d'environnement sans utiliser export, cette variable est uniquement disponible dans le script qu'il définit, dans aucun processus enfants. Suis-je incorrect? Comment puis-je réaliser ce que je veux ici? Merci

+0

'VAR = valeur cmd', sur une ligne, exporte la variable pour la durée de cette ligne. C'est * ce que ça fait *. Alors bien sûr, il est toujours hérité par les sous-processus. –

Répondre

0

Votre compréhension est incorrecte. Sans export, ils sont des variables bash. export "les promeut" aux variables d'environnement.

Vous devez avoir gnome-terminal pour exécuter un script qui désactive les variables avant d'exécuter le shell.

+0

Je vois ce que tu veux dire. Quelle serait la meilleure façon de le faire? – mjr

2

Vous pouvez utiliser env déconfigurer la variable pour la commande exécuter à l'intérieur du terminal, comme celui-ci:

L'affectation XDG_CONFIG_HOME=~/.config/darkthemesettings avant la commande gnome-terminal définit la variable pour le terminal. Le terminal exécutera les arguments après l'option -x en tant que commande shell. Cette commande shell bash est préfixée par env -u XDG_CONFIG_HOME qui désactive la variable dans l'environnement pour exécuter bash.

Questions connexes