On Thu, Mar 16, 2023 at 05:21:23PM +0100, Tycho Kirchner wrote: > Hi, > when compiling bash with a plain > > mkdir build; cd build; ../configure && make > > the login shell detection (leading dash: -bash) is apparently broken - at > least, ~/.bashrc is not sourced.
What you're referring to is an optional compile-time feature, which is not enabled in the vanilla bash source code. > This happens in all tested versions, from 4.4 until the latest release 5.2.15. > Interestingly, using distribution provided binaries, everything is fine > (tested on Debian Bullseye, Debian testing and OpenSuse Leap). Those particular Linux vendors must have chosen to enable it. /* Define this to make non-interactive shells begun with argv[0][0] == '-' run the startup files when not in posix mode. */ /* #define NON_INTERACTIVE_LOGIN_SHELLS */ If you want to turn this on, it's in config-top.h. > echo hi from bashrc >&2 > > to the beginning of your ~/.bashrc. For the record, ~/.bashrc is not a file that's read (directly) by bash when invoked in this mode. You must be sourcing it from your ~/.profile or ~/.bash_{profile,login} file. Also for the record, you can skip Python in your reproducer. Bash'e exec -a can do the same thing: unicorn:~$ (exec -a -bash /bin/bash nosuchscript) hi from .profile -bash: nosuchscript: No such file or directory unicorn:~$ (exec -a -bash /usr/local/bin/bash-5.2 nosuchscript) -bash: nosuchscript: No such file or directory (I'm on Debian too, so I can confirm that Debian has enabled this NON_INTERACTIVE_LOGIN_SHELLS feature in its /bin/bash.)