[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: How To Permanently Add-to a Users PATH Statement in the Bash Shell



On Wed, Jul 08, 2020 at 10:44:39AM +1000, Zenaan Harkness wrote:
>  - XFCE acts as, or uses, Dash or something that does not propagate shell functions in the parent env

There are many layers involved.  Assuming you're logging in with a "Debian
X session", a POSIX shell (sh) is used to read most of the config files
for the Xsession stuff.  Bash extensions like exporting functions won't
be possible at that point.

>  - so launch startx, figuring out over many failures to start "modern" "sessions"

Yeah, as I keep saying to others on this list, the entire login paradigm
is different when you use startx vs. a display manager.  Testing one by
using the other is not going to work.

With a console+startx login, your session is begun by an interactive
login shell (probably bash).  Tricks like exporting functions into the
environment with the intent to make them available in all of your future
xterms *will* work from here.

They *won't* work from a display manager login, though.

With a DM login, you have a bunch of sh scripts (which aren't even login
shells) that can export variables but *not* functions.  You don't get
a bash shell until you actually open a terminal.

None of your shell's dot files are used at all, until you open a terminal,
and then *only* .bashrc gets read (unless you configure your terminal
to run a login shell -- which some people do, just to make things even
*more* difficult to explain and diagnose).

>  - but alas, XFCE would not propagate shell functions

It's not XFCE per se.  It's the fact that a display manager was used for
the initial login.  Even if you configure it to run a single gigantic
xterm and nothing else.

On Wed, Jul 08, 2020 at 08:24:56AM +0300, Andrei POPESCU wrote:
> On Mi, 08 iul 20, 10:44:39, Zenaan Harkness wrote:
> >  - so try somewhere in the session startup apps - nope, courdn't 
> >  figure it out at least
> 
> For Debian you want ~/.xsessionrc

Do note, as I mentioned on the wiki, that ~/.xsessionrc is read by
a POSIX shell, and you can't use bashisms in it.

unicorn:~$ grep -r USERXSESSIONRC /etc/X11
/etc/X11/Xsession.d/40x11-common_xsessionrc:if [ -r "$USERXSESSIONRC" ]; then
/etc/X11/Xsession.d/40x11-common_xsessionrc:  . "$USERXSESSIONRC"
/etc/X11/Xsession:USERXSESSIONRC=$HOME/.xsessionrc

See, the ~/.xsessionrc file is dotted in (by a POSIX shell).  It's not
executed as a program.  So you can't just change the shebang on it, or
anything like that.

If the goal is to export bash functions into the environment for the
entire session, honestly, sticking with console + startx is the best
approach.


Reply to: