No puede iniciar un script de shell desde el screen
sesión ya que heredaría el antiguo entorno. Sin embargo, puede usar un fifo para obtener las nuevas variables de entorno en la sesión de pantalla anterior. Puede llenar ese fifo cuando inicie su sesión gráfica.
#!/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
Inicie ese script en segundo plano al iniciar sesión (solo terminará cuando se lean todas las variables).
Ahora puede leer desde el fifo, p. agrega esta función a tu .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
}
para que puedas en tu viejo screen
sesión
update_session
Puedes invocar el setenv
comando para cambiar las variables de entorno en el proceso de pantalla de forma interactiva, usando:Ctrl -A +:setenv
(Tenga en cuenta el :
carácter para ingresar un comando de pantalla). Se le solicitará el nombre y el valor de la variable de entorno.
Tenga en cuenta que (según otras respuestas/comentarios) esto afecta el proceso de pantalla (principal) y, por lo tanto, las sesiones de pantalla recién creadas, pero no su sesión de pantalla actual ni ninguna sesión de pantalla existente.
Puede especificar el nombre y el valor de la variable de entorno al mismo tiempo si lo desea:Ctrl -A +:setenv DISPLAY :100
. Establecerá la PANTALLA en ":100" para nuevas sesiones de pantalla.
Para eliminar una variable de entorno, puede usar 'unsetenv', p. Ctrl -A +:unsetenv DISPLAY
He implementado un script para hacer esto. Puede obtenerlo aquí:https://github.com/DarwinAwardWinner/screen-sendenv
Después de poner screen-sendenv.py
en tu $PATH
, puede usar el siguiente fragmento en su .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
}
Para usarlo, simplemente ejecute screen_pushenv
antes de ejecutar screen -r
para volver a adjuntar a su sesión de pantalla. Luego, después de adjuntar con screen -r
, puede actualizar el entorno en sus shells existentes con screen_pullenv
. Las funciones de tmux logran lo mismo para tmux, otro multiplexor de terminal similar a screen.