Shell skript nelze spustit z screen
relaci, protože by zdědila staré prostředí. Můžete nám však použít FIFO, abychom dostali nové proměnné prostředí do staré obrazovky. Toto fifo můžete vyplnit při spuštění grafické relace.
#!/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
Spusťte tento skript na pozadí při přihlášení (ukončí se pouze tehdy, když jsou z něj načteny všechny proměnné).
Nyní si můžete z fifo přečíst např. přidejte tuto funkci do .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
}
takže můžete ve svém starém screen
relace
update_session
Můžete vyvolat setenv
příkaz pro změnu proměnných prostředí v procesu obrazovky interaktivně pomocí:Ctrl -A +:setenv
(Všimněte si :
znak pro zadání příkazu obrazovky.) Budete vyzváni k zadání názvu a hodnoty proměnné prostředí.
Všimněte si, že (podle dalších odpovědí/komentářů) to ovlivňuje proces (nadřazené) obrazovky a tedy nově vytvořené relace obrazovky, ale ne vaši aktuální relaci obrazovky ani žádné existující relace obrazovky.
Pokud chcete, můžete zadat název a hodnotu proměnné prostředí současně:Ctrl -A +:setenv DISPLAY :100
. Nastaví DISPLAY na ":100" pro nové relace obrazovky.
K odstranění proměnné prostředí můžete použít 'unsetenv' - např. Ctrl -A +:unsetenv DISPLAY
Implementoval jsem k tomu skript. Můžete jej získat zde:https://github.com/DarwinAwardWinner/screen-sendenv
Po zadání screen-sendenv.py
do vašeho $PATH
, můžete ve svém .bashrc použít následující fragment:
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
}
Chcete-li jej použít, stačí spustit screen_pushenv
než spustíte screen -r
pro opětovné připojení k relaci obrazovky. Poté po připojení pomocí screen -r
, můžete aktualizovat prostředí ve svých existujících shellech pomocí screen_pullenv
. Funkce tmux dosahují stejné věci pro tmux, další terminálový multiplexer podobný screenu.