1 votes

Changer la variable d'environnement globale en utilisant un script qui est lancé en utilisant xbindkeys ?

Résumé :

  • J'ai un simple script shell qui bascule une variable d'environnement de la valeur foo à bar, ou vice-versa, en fonction de sa valeur actuelle.
  • J'utilise F12 pour déclencher ce script, et je sais que cela fonctionne.
  • Lorsque le script est déclenché, la nouvelle valeur ne persiste pas une fois le script terminé.

Qu'est-ce que je fais de mal ?

Détails :

1. Le script :

Mon script vérifie si la variable d'environnement est présente, ou la crée si elle est manquante :

if [ -z $COLEMAK ];then export COLEMAK="qwerty";fi

Ensuite, le script bascule la valeur de ce qu'elle était à l'autre valeur :

if [ "$COLEMAK" == "qwerty" ] then export COLEMAK="colemak" ; xmodmap ~/colemak.map else export COLEMAK="qwerty" ; xmodmap ~/qwerty.map fi

Notez que en plus de basculer la valeur de la variable, le script utilise xmodmap pour remapper le clavier d'une disposition à une autre. C'est le but principal du script, et c'est pourquoi je veux le déclencher à partir d'une touche de fonction.

Je sais que ce script ne fonctionne que lorsqu'il est sourcé (. ~/foo.sh), et cela fonctionne bien à partir du terminal virtuel. Jusque-là tout va bien.

2. xbindkeys :

J'ai configuré .xbindkeysrc.scm pour inclure (xbindkey '(F12) "term &") et cela exécute correctement la commande lorsque je presse F12. Jusque-là tout va bien.

J'ai modifié cette ligne pour lire (xbindkey '(F12) ". ~/foo.sh &"). Je sais que le script s'exécute car il écrit une ligne de journal lorsque je presse F12, mais le changement dans la variable d'environnement ne persiste pas après la fin du script.

1voto

Ralf Points 226

C'est le comportement attendu. Un programme ne peut définir que les variables d'environnement pour lui-même et ses processus enfants.

Dans votre cas, vous pourriez soit stocker l'état actuel dans un fichier (comme ~/.active-modemap) et agir sur le contenu de ce fichier. Ou vous pourriez peut-être obtenir le modemap actuellement utilisé en examinant (avec grep, etc.) la sortie de xmodmap -pke (ou toute autre sortie de modmap).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X