Re: GNU Bash shell startup files

"Pierre Labastie" ([email protected] via blfs-dev Mailing List) <[email protected]> Fri, 16 Jan 2026 16:44:24 +0100
Newsgroups gmane.linux.lfs.beyond.devel
Message-ID <[email protected]>
On Fri, 2026-01-16 at 11:39 -0300, Jamenson Espindula wrote:
> Em sex., 16 de jan. de 2026 às 10:07, Xi Ruoyao
> <[email protected]> escreveu:
> > 
> > As you've put the echo line at the end of the file, if one file
> > sources
> > another, you'll see a reversed order.
> > 
> > For example, in the "su --login" case:
> > 
> > 1. bash reads /etc/profile, executes it, and prints "/etc/profile."
> > 2. bash reads .bash_profile, which sources .bashrc, and it only
> > prints
> > ".bash_profile" after finishing .bashrc.
> > 
> > As your deduction is already completely wrong here, I'll not waste
> > more
> > time to read further.
> > 
> Well done! Sorry.
> Update: I put an "echo" at the beginning of every file too. Below is
> the result:
> 
> Successful login
> 
> reading file '/etc/profile'
> read file '/etc/profile'
> reading file '/root/.bash_profile'
> reading file '/root/.bashrc'
> reading file '/etc/bashrc'
> read file '/etc/bashrc'
> read file '/root/.bashrc'
> read file '/root/.bash_profile'
> 
> 
> su
> 
> reading file '/root/.bashrc'
> reading file '/etc/bashrc'
> read file '/etc/bashrc'
> read file '/root/.bashrc'
> 
> 
> Some conclusions (updated):
> 
> Conclusion one: regardless if it be 'login shell' or a 'non-login
> shell', the '$HOME/.bashrc' and '/etc/bashrc' files _are always read_
> and in that order.
> 
> Conclusion two: the '$HOME/.bash_profile' is the _first personal file
> read_ after a successful login using the program '/usr/bin/login'
> (Note: confirmed by bash(1) manual page: 'When bash is invoked as an
> interactive login shell, or as a non-interactive shell with the
> --login option, it first reads and executes commands from the file
> /etc/profile, if that file exists. After reading that file, it looks
> for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order,
> and
> reads and executes commands from the first one that exists and is
> readable. The --noprofile option may be used when the shell is
> started
> to inhibit this behavior'). After Bash has found the
> '~/.bash_profile'
> file, '~/.bash_login' and '~/.profile' are not read.
> 
> Conclusion three: the '$HOME/.profile' file is _not read_ at all
> (considering the defaults of the Beyond Linux From Scratch).
> 
> Conclusion four: was completely wrong in the Original Post.
> 
> Meanwhile, inside the GNU Screen (which fits into the 'non-login
> shell' category), the 'completions' of the GNU Bash are not working
> (considering the 'stock' files).
> 
> My best guess is (updated): source the '$HOME/.profile' (in the
> '$HOME/.bashrc' file) (which should contain the proper source
> commands
> of the bash completions).

We have ~/.profile for the case when the shell is invoked as "sh" (so-
called POSIX mode). In this case, ~/.profile is the only personal file
that is read.
For the problem with completions, I think you need to manually source
/etc/profile when using a non login shell. ~/.profile does not source
files in /etc/profile.d anyway...

Pierre

-- 
http://lists.linuxfromscratch.org/sympa/info/blfs-dev
Unsubscribe: See the above information page