Vous ne pouvez pas démarrer un script shell à partir du screen
session puisqu'il hériterait de l'ancien environnement. Vous pouvez cependant utiliser un fifo pour obtenir les nouvelles variables d'environnement dans l'ancienne session d'écran. Vous pouvez remplir ce fifo lorsque vous démarrez votre session graphique.
#!/bin/bash
FIFO=/tmp/your_variables
[ -e $FIFO ] && cat $FIFO > /dev/null || mkfifo $FIFO
# save number of variables that follow
NVARS=2
echo $NVARS > $FIFO
echo ENV1=sth1 > $FIFO
echo ENV2=sth2 > $FIFO
Démarrez ce script en arrière-plan lors de la connexion (il ne se terminera que lorsque toutes les variables seront lues).
Vous pouvez maintenant lire à partir du fifo, par ex. ajoutez cette fonction à votre .bashrc
update_session() {
FIFO=/tmp/your_variables
NVAR=$(cat $FIFO)
for i in $(seq $NVAR); do
export $(cat $FIFO)
done
#delete the pipe, or it will not work next time
rm $FIFO
}
afin que vous puissiez dans votre ancien screen
séance
update_session
Vous pouvez invoquer le setenv
commande pour modifier les variables d'environnement dans le processus d'écran de manière interactive, en utilisant :Ctrl -A +:setenv
(Notez le :
caractère pour entrer une commande d'écran.) Vous serez invité à entrer le nom et la valeur de la variable d'environnement.
Notez que (selon d'autres réponses/commentaires) cela affecte le processus d'écran (parent) et donc les sessions d'écran nouvellement créées, mais pas votre session d'écran actuelle ni les sessions d'écran existantes.
Vous pouvez spécifier le nom et la valeur de la variable d'environnement en même temps si vous le souhaitez :Ctrl -A +:setenv DISPLAY :100
. Définit l'AFFICHAGE sur ":100" pour les nouvelles sessions d'écran.
Pour supprimer une variable d'environnement, vous pouvez utiliser 'unsetenv' - par ex. Ctrl -A +:unsetenv DISPLAY
J'ai implémenté un script pour ce faire. Vous pouvez l'obtenir ici :https://github.com/DarwinAwardWinner/screen-sendenv
Après avoir mis screen-sendenv.py
dans votre $PATH
, vous pouvez utiliser l'extrait de code suivant dans votre .bashrc :
VARS_TO_UPDATE="DISPLAY DBUS_SESSION_BUS_ADDRESS SESSION_MANAGER GPG_AGENT_INFO"
screen_pushenv () {
screen-sendenv.py -t screen $VARS_TO_UPDATE
}
tmux_pushenv () {
screen-sendenv.py -t tmux $VARS_TO_UPDATE
}
screen_pullenv () {
tempfile=$(mktemp -q) && {
for var in $VARS_TO_UPDATE; do
screen sh -c "echo export $var=\$$var >> \"$tempfile\""
done
. "$tempfile"
rm -f "$tempfile"
}
}
tmux_pullenv () {
for var in $VARS_TO_UPDATE; do
expr="$(tmux showenv | grep "^$var=")"
if [ -n "$expr" ]; then
export "$expr"
fi
done
}
Pour l'utiliser, lancez simplement screen_pushenv
avant d'exécuter screen -r
pour vous rattacher à votre session d'écran. Puis, après avoir attaché avec screen -r
, vous pouvez mettre à jour l'environnement dans vos shells existants avec screen_pullenv
. Les fonctions tmux accomplissent la même chose pour tmux, un autre multiplexeur de terminal similaire à screen.