Sie können kein Shell-Skript von screen
aus starten Sitzung, da sie die alte Umgebung erben würde. Sie können jedoch ein Fifo verwenden, um die neuen Umgebungsvariablen in die alte Bildschirmsitzung zu bekommen. Sie können dieses Fifo füllen, wenn Sie Ihre grafische Sitzung starten.
#!/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
Starten Sie dieses Skript im Hintergrund bei der Anmeldung (es wird nur beendet, wenn alle Variablen daraus gelesen wurden).
Jetzt können Sie aus dem Fifo lesen, z. Fügen Sie diese Funktion zu Ihrem .bashrc
hinzu
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
}
damit Sie in Ihrem alten screen
können Sitzung
update_session
Sie können den setenv
aufrufen Befehl zum interaktiven Ändern von Umgebungsvariablen im Bildschirmprozess mit:Ctrl -A +:setenv
(Beachten Sie den :
Zeichen, um einen Bildschirmbefehl einzugeben.) Sie werden aufgefordert, den Namen und Wert der Umgebungsvariablen einzugeben.
Beachten Sie, dass dies (gemäß anderen Antworten/Kommentaren) den (übergeordneten) Bildschirmprozess und damit neu erstellte Bildschirmsitzungen betrifft, aber weder Ihre aktuelle Bildschirmsitzung noch vorhandene Bildschirmsitzungen.
Sie können den Namen und den Wert der Umgebungsvariablen gleichzeitig angeben, wenn Sie möchten:Ctrl -A +:setenv DISPLAY :100
. Setzt die ANZEIGE für neue Bildschirmsitzungen auf ":100".
Um eine Umgebungsvariable zu entfernen, können Sie 'unsetenv' verwenden - z. Strg -A +:unsetenv DISPLAY
Dazu habe ich ein Skript implementiert. Sie können es hier herunterladen:https://github.com/DarwinAwardWinner/screen-sendenv
Nach dem Setzen von screen-sendenv.py
in Ihr $PATH
, können Sie das folgende Snippet in Ihrer .bashrc-Datei verwenden:
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
}
Um es zu verwenden, führen Sie einfach screen_pushenv
aus bevor Sie screen -r
ausführen wieder an Ihre Bildschirmsitzung anhängen. Dann nach dem Anhängen mit screen -r
, können Sie die Umgebung in Ihren vorhandenen Shells mit screen_pullenv
aktualisieren . Die tmux-Funktionen erreichen dasselbe für tmux, einen anderen Terminal-Multiplexer, ähnlich wie screen.