Non puoi avviare uno script di shell da screen
session poiché erediterà il vecchio ambiente. Puoi comunque utilizzare un fifo per inserire le nuove variabili d'ambiente nella vecchia sessione dello schermo. Puoi riempire quel fifo quando avvii la tua sessione grafica.
#!/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
Avvia lo script in background all'accesso (terminerà solo quando tutte le variabili saranno lette da esso).
Ora puoi leggere dal fifo, ad es. aggiungi questa funzione al tuo .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
}
in modo che tu possa nel tuo vecchio screen
sessione
update_session
Puoi invocare il setenv
comando per modificare le variabili d'ambiente nel processo dello schermo in modo interattivo, utilizzando:Ctrl -A +:setenv
(Notare il :
carattere per immettere un comando sullo schermo.) Verrà richiesto il nome e il valore della variabile di ambiente.
Tieni presente che (come per altre risposte/commenti) ciò influisce sul processo dello schermo (genitore) e quindi sulle sessioni dello schermo appena create, ma non sulla sessione dello schermo corrente né su eventuali sessioni dello schermo esistenti.
Puoi specificare contemporaneamente il nome e il valore della variabile d'ambiente se vuoi:Ctrl -A +:setenv DISPLAY :100
. Imposterà il DISPLAY su ":100" per le nuove sessioni dello schermo.
Per rimuovere una variabile d'ambiente puoi usare 'unsetenv' - ad es. Ctrl -A +:unsetenv DISPLAY
Ho implementato uno script per fare questo. Puoi ottenerlo qui:https://github.com/DarwinAwardWinner/screen-sendenv
Dopo aver inserito screen-sendenv.py
nel tuo $PATH
, puoi utilizzare il seguente snippet nel tuo .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
}
Per usarlo, basta eseguire screen_pushenv
prima di eseguire screen -r
per ricollegarsi alla sessione dello schermo. Quindi, dopo aver allegato con screen -r
, puoi aggiornare l'ambiente nelle tue shell esistenti con screen_pullenv
. Le funzioni tmux realizzano la stessa cosa per tmux, un altro multiplexer di terminale simile a screen.