GNU/Linux >> Linux Esercitazione >  >> Linux

Aggiornamento delle variabili di ambiente della sessione dello schermo per riflettere il nuovo accesso grafico?

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.


Linux
  1. Come sapere se è in esecuzione in una console Linux rispetto a una sessione ssh?

  2. Controllo delle variabili di ambiente

  3. Imposta un ambiente temporaneo ($PATH)

  4. Come annullare l'impostazione di molte variabili d'ambiente

  5. Rinomina la sessione dello schermo

Come impostare la variabile d'ambiente in Windows

Come impostare le variabili d'ambiente in MacOS

Come utilizzare lo schermo Linux

Rimuovi la sessione GUEST dalla schermata di accesso di Ubuntu

Guida dettagliata alle variabili d'ambiente Linux

Variabili d'ambiente Linux