Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Is zsh buggy in connection with screen?
- X-seq: zsh-users 9666
- From: Wayne Davison <wayned@xxxxxxxxxxxxxxxxxxxxx>
- To: zsh-users@xxxxxxxxxx
- Subject: Re: Is zsh buggy in connection with screen?
- Date: Tue, 8 Nov 2005 09:44:11 -0800
- In-reply-to: <20051108141317.GQ27583@xxxxxxxxxxxxx>
- Mailing-list: contact zsh-users-help@xxxxxxxxxx; run by ezmlm
- References: <20051108130233.GA6146@xxxxxxxx> <20051108141317.GQ27583@xxxxxxxxxxxxx>
On Tue, Nov 08, 2005 at 03:13:17PM +0100, Vincent Lefevre wrote:
> What is your terminal? xterm for instance sets environment variables
> that are no longer valid in a different terminal and/or X11 session:
I use screen too, and have implemented some environment variable
"tunneling" to ensure that the inner shells get their environment
updated.  What I did is to write a shell script named "update_screenenv"
that writes out a set of environment-updating commands into a file named
~/.screenenv.  I then alias my normal screen-startup command (which
happens to be the alias "scr") to run this command before starting
screen:
    alias scr=' ~/bin/update_screenenv; screen -R -d -i'
Finally, I define a preexec function in my .zshrc, but only when the
TERM is "screen*", so that the inner shells source this file (my preexec
command also does other things, but I've removed them for clarity):
    case "$TERM" in
    screen*)
	function preexec {
	    . ~/.screenenv
	}
	;;
    xterm*)
	# ... etc. ...
	;;
    *)
	# ... etc. ...
	;;
    esac
Using this causes the inner zsh environments to get updated from the
outer environment that was present when screen was re-attached.
My update script looks like this (yeah, it's ugly, but it works):
    #!/bin/zsh
    cat >~/.screenenv <<EOT
    export SSH_AUTH_SOCK=$SSH_AUTH_SOCK
    EOT
    if [[ -n "$SSH_AGENT_PID" ]]; then
	export SSH_AGENT_PID=$SSH_AGENT_PID >>~/.screenenv
    else
	echo "unset SSH_AGENT_PID" >>~/.screenenv
    fi
    if [[ -n "$DISPLAY" ]]; then
	echo "export DISPLAY=$DISPLAY" >>~/.screenenv
    else
	echo "unset DISPLAY" >>~/.screenenv
    fi
    if [[ -n "$WINDOWID" ]]; then
	echo "export WINDOWID=$WINDOWID" >>~/.screenenv
    else
	echo "unset WINDOWID" >>~/.screenenv
    fi
    if [[ -n "$SSH_TTY" ]]; then
	cat >>~/.screenenv <<EOT
    export SSH_CLIENT="$SSH_CLIENT"
    export SSH_CONNECTION="$SSH_CONNECTION"
    export SSH_TTY=$SSH_TTY
    EOT
    else
	echo "unset SSH_CLIENT SSH_CONNECTION SSH_TTY" >>~/.screenenv
    fi
    if [[ -n "$SESSION_MANAGER" ]]; then
	echo "export SESSION_MANAGER=$SESSION_MANAGER" >>~/.screenenv
    else
	echo "unset SESSION_MANAGER" >>~/.screenenv
    fi
..wayne..
Messages sorted by:
Reverse Date,
Date,
Thread,
Author