Package: base-files
Version: 6.0squeeze2
Severity: normal
Tags: patch
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Per bash manual: "When bash is invoked with the name sh, it tries to mimic
the startup behavior of historical versions of sh as closely as possible,
while conforming to the posix standard as well".
However, the current conditional code in /etc/profile does not address this
and results in sourcing /etc/bash.bashrc even when bash is invoked as /bin/sh
(to try it, just prepend a line 'echo "bash.bashrc"' in /etc/bash.bashrc and
then issue a `sh --login' command, after of course ensuring that the /bin/sh
symlink points to /bin/bash).
A patch is attached that tests for this case (etc_profile-bash_as_sh.patch).
Note that since bash enters posix mode after reading the startup files the
only way to check is to examine the value of $BASH. This btw may also mean
that any code inside the startup files which uses `shopt -oq posix' checks
(such as bash_completion) is probably broken. Note also that there is no need
to check for the `bash --posix --login' case, since then bash does not read
any startup files and only honors ENV variable.
I don't know if letting /etc/bash.bashrc to be sourced even on the sh case has
been done deliberately, but IMHO is not good, since code in /etc/bash.bashrc
typically assumes that the full bash featureset is available, which is this
case is a wrong assumption.
If that kind of site-wide customisation is desired for sh shells it would be
better to be implemented as an `ENV=/etc/sh.shrc ; export ENV' sequence of
commands for the general sh case (so that it is also available for dash and
possibly other shells). I attach a supplementary patch for that, in case you
find this possibility of interest (etc_profile-sh.shrc.patch).
regards
George Zarkadas
- -- System Information:
Debian Release: 6.0.2
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'proposed-updates'), (500,
'stable'), (450, 'testing-proposed-updates'), (450, 'testing'), (400,
'unstable')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.32-5-amd64 (SMP w/4 CPU cores)
Locale: LANG=el_GR.utf8, LC_CTYPE=el_GR.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages base-files depends on:
ii gawk [awk] 1:3.1.7.dfsg-5 GNU awk, a pattern scanning and pr
ii mawk [awk] 1.3.3-15 a pattern scanning and text proces
base-files recommends no packages.
base-files suggests no packages.
- -- no debconf information
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
iQEbBAEBAgAGBQJOFLJsAAoJEJWXIVmJ5BwW5lMH+NoI/zYEH8cdzyVLk3rEKQgS
oEgJsGAssGP0RVtQ3j6rNSe7ySth3k0dDkMYosi46z3bE+ovWEqIeP894GI37MBu
UlEDho49D48G4d7wlZm9IXP1EziT7Wn1pWYWCfRWZcIEp3qHm6OAsmSOWkpSh29k
k7PQuYreAaPTAymK3+lAFsSoE/BeNGOWXzOnUuCbxVORMYo3ZOpwTvG3Sa1ueqYC
gRz+r9IpwpG69ZN7FSx5fQGBmO3mJ5mko1xFA7njPOFJKOg/mS8Afb0A3q+OKlRQ
7LPnc6TJpDBnJnQ1GAhu+rclvJYeeEFNnc3FOyEZDy7Dn55mUTtNHGzADVDFnQ==
=8EBj
-----END PGP SIGNATURE-----
--- /etc/profile 2010-08-06 20:42:50.000000000 +0300
+++ /etc/profile 2011-07-06 18:40:59.187069301 +0300
@@ -9,11 +9,16 @@
export PATH
if [ "$PS1" ]; then
- if [ "$BASH" ]; then
- # The file bash.bashrc already sets the default PS1.
- # PS1='\h:\w\$ '
+ # When bash is called as sh it should behave as sh.
+ # Note that since bash enters posix mode after reading startup files,
+ # the only test that can be applied here is the value of $BASH.
+ if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
if [ -f /etc/bash.bashrc ]; then
+ # The file bash.bashrc already sets the default PS1.
. /etc/bash.bashrc
+ else
+ # Get a sane default if bash.bashrc does not exist.
+ PS1='\h:\w\$ '
fi
else
if [ "`id -u`" -eq 0 ]; then
--- /etc/profile 2010-08-06 20:42:50.000000000 +0300
+++ /etc/profile 2011-07-06 18:40:59.187069301 +0300
@@ -22,6 +22,17 @@
PS1='$ '
fi
fi
+
+ # Support a similar to bash.bashrc site-wide customisation
+ # for interactive shells for the plain bourne shell.
+ # We put it out of the bash/sh conditional so that it is available
+ # to users with a bash login shell when starting an interactive sh
+ # subshell.
+
+ if [ -f /etc/sh.shrc ]; then
+ ENV=/etc/sh.shrc
+ export ENV
+ fi
fi
# The default umask is now handled by pam_umask.
--- /dev/null 2011-07-06 18:40:59.187069301 +0300
+++ /etc/sh.shrc 2011-07-06 18:40:59.187069301 +0300
@@ -1,0 +1,4 @@
+# System-wide .shrc file for interactive sh(1) shells.
+
+# To enable the settings / commands in this file for login shells as well,
+# set "ENV=/etc/sh.shrc ; export ENV" in /etc/profile.