Linux – Why does the $LD_LIBRARY_PATH get unset when using screen with bash

bashgnu-screenlinux

This is related to Why does my LD_LIBRARY_PATH get unset launching terminal?, but a different set of symptoms.

First, /usr/bin/screen is setuid as per the other question. Second, the default shell on this system is /bin/tcsh for various historical reasons, and we're not allowed to chsh to /bin/bash, so I typically run bash manually immediately after login. Third, I almost always use screen, but I want ctrl-a ctrl-c in screen to create a new bash "tab", so I always invoke bash first.

That is:

{~} $ echo $SHELL
/bin/tcsh
{~} $ bash
[~] echo $SHELL
/bin/bash
[~] screen -U
[~]

…and when reconnecting:

{~} $ echo $SHELL
/bin/tcsh
{~} $ screen -dUr
[~] echo $SHELL
/bin/bash
[~] 

However, my $LD_LIBRARY_PATH is there in tcsh, there in bash, but empty once I run screen; it is still present if I just run screen from tcsh, but then I get new tcsh "tabs" when I use ctrl-a ctrl-c in screen.

Any ideas?

Best Answer

Because screen is setuid, it unsets LD_LIBRARY_PATH. When your shell is tcsh, tcsh initialisation (from .tcshrc I suppose, since screen doesn't default to creating login shells) sets LD_LIBRARY_PATH again. If you want LD_LIBRARY_PATH to be set in your bash screen windows, set it from .bashrc.

Related Question