GNU/Linux >> Znalost Linux >  >> Linux

Aktualizujete proměnné prostředí relace obrazovky, aby odrážely nové grafické přihlášení?

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.


Linux
  1. Zabijte relaci oddělené obrazovky

  2. Jak zjistit, zda běží v linuxové konzoli oproti relaci ssh?

  3. Kontrola proměnných prostředí

  1. Proměnné prostředí v symbolických odkazech

  2. Nastavit dočasné prostředí ($PATH)

  3. Jak zrušit nastavení mnoha proměnných prostředí

  1. Jak nastavit proměnnou uživatelského prostředí? (trvale, ne relace)?

  2. Přejmenovat relaci obrazovky

  3. Jak číst proměnné prostředí procesu