[gnu.bash.bug] Bash as a root shell

ray@GIBBS.PHYSICS.PURDUE.EDU (Ray Moody) (08/04/89)

    I fixed a bug in polite_directory_format:  If $HOME was /a/ray,
the directory /a/raymond would be politely printed as ~mond.

    I also have a few enhancements that make bash work better when you
are root:

    I have added stuff to decde_prompt_string so that "\$" prints "$"
unless you are root, and then it prints "#".  I have changed the
default prompt to make use of this feature.  (This seemed to be a
better approach than picking a default prompt at startup -- now I can
use the same PS1 for both root and normal shells).

    I have changed polite_directory_format so that "/usr/bin" will not
be politely printed as "~usr/bin" when $HOME is /.  (This last one is
really a bugfix and not an enhancement.)

								Ray
-------------------------------------------------------------------------------
RCS file: RCS/builtins.c,v
retrieving revision 1.2.1.1
diff -c -r1.2.1.1 builtins.c
*** /tmp/,RCSt1005909	Thu Aug  3 18:17:49 1989
--- builtins.c	Thu Aug  3 17:55:45 1989
***************
*** 2680,2686
    char *home = get_string_value ("HOME");
    int l = home ? strlen (home) : 0;
  
!   if (l && strncmp (home, name, l) == 0) {
      strcpy (tdir + 1, name + l);
      tdir[0] = '~';
      return (tdir);

--- 2680,2686 -----
    char *home = get_string_value ("HOME");
    int l = home ? strlen (home) : 0;
  
!   if (l > 1 && strncmp (home, name, l) == 0 && name[strlen (name) - 1] == '/') {
      strcpy (tdir + 1, name + l);
      tdir[0] = '~';
      return (tdir);
===================================================================
RCS file: RCS/Makefile,v
retrieving revision 1.2.1.1
diff -c -r1.2.1.1 Makefile
*** /tmp/,RCSt1005909	Thu Aug  3 18:17:57 1989
--- Makefile	Thu Aug  3 17:46:07 1989
***************
*** 93,99
  PROGRAM = bash
  
  # The default primary and secondary prompts.
! PPROMPT = '"${PROGRAM}$$ "'
  SPROMPT = '"${PROGRAM}>"'
  
  # The group of configuration flags.  These are for shell.c

--- 93,99 -----
  PROGRAM = bash
  
  # The default primary and secondary prompts.
! PPROMPT = '"${PROGRAM}\\$$ "'
  SPROMPT = '"${PROGRAM}>"'
  
  # The group of configuration flags.  These are for shell.c
===================================================================
RCS file: RCS/shell.c,v
retrieving revision 1.2
diff -c -r1.2 shell.c
*** /tmp/,RCSt1005909	Thu Aug  3 18:17:58 1989
--- shell.c	Thu Aug  3 17:46:03 1989
***************
*** 67,73
  char *the_current_maintainer = MAINTAINER;
  
  #ifndef PPROMPT
! #define PPROMPT "bash$ ";
  #endif
  char *primary_prompt = PPROMPT;
  

--- 67,73 -----
  char *the_current_maintainer = MAINTAINER;
  
  #ifndef PPROMPT
! #define PPROMPT "bash\\$ ";
  #endif
  char *primary_prompt = PPROMPT;
  
===================================================================
RCS file: RCS/parse.y,v
retrieving revision 1.2.1.1
diff -c -r1.2.1.1 parse.y
*** /tmp/,RCSt1005909	Thu Aug  3 18:18:02 1989
--- parse.y	Thu Aug  3 17:43:33 1989
***************
*** 1419,1424
  	\h	the hostname
  	\#	the command number of this command
  	\!	the history number of this command
  	\<octal> character code in octal
  	\\	a backslash
  */

--- 1419,1425 -----
  	\h	the hostname
  	\#	the command number of this command
  	\!	the history number of this command
+ 	\$	a $, unless you are root, then a #.
  	\<octal> character code in octal
  	\\	a backslash
  */
***************
*** 1574,1579
  
  	    case '\\':
  	      temp = savestring ("\\");
  	      goto add_string;
  
  	    default:

--- 1575,1584 -----
  
  	    case '\\':
  	      temp = savestring ("\\");
+ 	      goto add_string;
+ 
+             case '$':
+ 	      temp = savestring (getuid () == 0 ? "#" : "$");
  	      goto add_string;
  
  	    default: