[gnu.bash.bug] Flurry of `file not found' messages.

romine@XAGSUN.EPM.ORNL.GOV (07/11/89)

I don't know if this has been discussed before, but I dislike the flurry
of `file not found' messages that are produced when CDPATH is non-null
and an attempt is made to change to a nonexistent directory.  The fix is
to delete the call to file_error at line 920 of builtins.c (bash-1.02).
I fixed the same behavior in versions 0.99 and 1.01.

					Chuck Romine
					romine@msr.epm.ornl.gov

P.S.  I have not mentioned machine/OS configurations, since this is not a
machine-dependent phenomenon.  It's evidently intentional.

bfox@AUREL.CALTECH.EDU (Brian Fox) (07/11/89)

   Date: Mon, 10 Jul 89 14:59:59 -0400
   From: romine@xagsun.epm.ornl.gov

   I don't know if this has been discussed before, but I dislike the flurry
   of `file not found' messages that are produced when CDPATH is non-null
   and an attempt is made to change to a nonexistent directory.  The fix is
   to delete the call to file_error at line 920 of builtins.c (bash-1.02).
   I fixed the same behavior in versions 0.99 and 1.01.

					   Chuck Romine
					   romine@msr.epm.ornl.gov

   P.S.  I have not mentioned machine/OS configurations, since this is not a
   machine-dependent phenomenon.  It's evidently intentional.


I don't get a "flurry of file not found" messages.  I only get one.
Please send your environment, and a recipe with a bug report of this
type.  It would help, for example, to know what the value of CDPATH is,
and if you have "cd" aliased or written as a function, or are using the
simple builtin.

bfox@aurel$ CDPATH=.:/usr/gnu/src:/usr/gnu:/usr/bin:/usr/src/XV11R3
bfox@aurel$ cd goodfkldfk
goodfkldfk: No such file or directory
bfox@aurel$ CDPATH=/usr/gnu/src:/usr/gnu:/usr/bin:/usr/src/XV11R3:.
bfox@aurel$ cd sldflksdf
sldflksdf: No such file or directory
bfox@aurel$

romine@XAGSUN.EPM.ORNL.GOV (07/11/89)

Brian,

	Sorry about the lack of information -- from reading the code, I just
assumed that the behavior I get was intentional.  I built bash-1.02 with
exactly one change (prior to commenting out the line I mentioned), and that
was just the MAINTAINER definition.  I'm running on a SUN 3/50 with OS 4.0.1.
(Note: I'm using gcc-1.35 with -traditional to compile bash.)

I have the following environment (using bash as my default shell):

xagsun% set
_=/usr/spool/mail/romine
OLDPWD=/usr/kvm
printman={
if [ $# -eq 1 ]  ; then
if [ -r $1 ]  ; then
cat $1 | rsh seq psditroff -man - 
else
filenam=`whereis -m $1` ; filenam=$filenam:$ ; if [ -r $filenam ]  ; then
cat $filenam | rsh seq psditroff -man - 
else
echo "function printman: file not found" 
fi

fi

else
echo "function usage: printman <name>" 
fi

}
print={
for v in $*; do if [ -r $v ]  ; then
case "$v" in 
  *.ps)
cat $v | rsh seq lpr -Plw1 ; shift 
  ;;
  *.l | *.man | *.[1-8])
cat $v | rsh seq psditroff -man - ; shift 
  ;;
  *)
cat $v | rsh seq enscript -G -fCourier-Bold8 ; shift 
  ;;
esac
else
echo "$v: No such file or directory" 
fi
; done
}
man={
if [ -r $1 ]  ; then
nroff -man $1 | less 
else
/usr/ucb/man $* 
fi

}
malias={
for v in $*; do grep $v $HOME/.mailrc ; done
}
look={
for v in $*; do /usr/bin/look -df $v /usr/sun1/local/src/ispell/web | awk -f /us
r/sun1/u0/romine/lib/ispell/expand.new.awk ; done
}
EUID=337
UID=337
HISTSIZE=500
HISTFILE=/usr/u0/romine/.bash_history
BASH_VERSION=1.02
PWD=/usr/dict
MAILPATH=/usr/spool/mail/romine
MAILCHECK=60
IFS=    

PS2=bash>
BASH=/usr/gnu/bin/bash
CDPATH=.:..:~:/usr:/usr/sun1:/usr/sun2:/usr/sun1/u0:/u0:/u1:/u2:/seq0:/
DISPLAY=unix:0.0
FLOAT_OPTION=f68881
HOME=/usr/u0/romine
LOGNAME=romine
PATH=/usr/u0/romine/bin:/usr/gnu/bin:/usr/ucb:/bin:/usr/bin:/usr/new:/usr/local:
/usr/local/bin:/etc:/usr/etc:/usr/tex/bin:/usr/local/X11.2/bin:.
PS1=\h% 
SHELL=/usr/gnu/bin/bash
SHLVL=5
TERM=xterm
USER=romine
auto_resume=1
ignoreeof=1
no_exit_on_failed_exec=1
nolinks=1
TERMCAP=vs|xterm|...(rest deleted for brevity -- see /etc/termcap)
WINDOWID=6291465

(Note: the artificially high value of SHLVL is due to exec-ing new versions,
but the behavior is reproducible in any case).

xagsun% type cd
cd is a shell builtin

xagsun% cd foobar
./foobar: No such file or directory
../foobar: No such file or directory
/usr/u0/romine/foobar: No such file or directory
/usr/foobar: No such file or directory
/usr/sun1/foobar: No such file or directory
/usr/sun2/foobar: No such file or directory
/usr/sun1/u0/foobar: No such file or directory
/u0/foobar: No such file or directory
/u1/foobar: No such file or directory
/u2/foobar: No such file or directory
/seq0/foobar: No such file or directory
/foobar: No such file or directory
foobar: No such file or directory
foobar: No such file or directory

As I mentioned, commenting out the `offending' line of code, as in the following
segment from builtin.c does the trick:

  else
    {
      if (chdir (newdir) < 0)
        {
/*
 *      commented out by romine to prevent a flurry of `file not found'
 *      messages when changing to a nonexistent directory, with CDPATH
 *      nonnull
 *        file_error (newdir);
 */
          return (0);
        }
      else
        {
          return (1);
        }
    }
}



Let me know if there is anything
further that I can do to help you.  And, by the way, I'm using bash as my
default shell, not because I think its buggy, but because it's very well-
and carefully-crafted.  Thanks for the work you put in.  It shows.

					Chuck Romine
					romine@msr.epm.ornl.gov

(P.S.  If it helps, with CDPATH unset, I get two copies of the message, i.e.

xagsun% unset CDPATH
xagsun% cd foobar
foobar: No such file or directory
foobar: No such file or directory
xagsun%

bfox@AUREL.CALTECH.EDU (Brian Fox) (07/11/89)

   Date: Mon, 10 Jul 89 16:44:39 -0400
   From: romine@xagsun.epm.ornl.gov

   Brian,

	   Sorry about the lack of information -- from reading the code,
   I just assumed that the behavior I get was intentional.  I built
   bash-1.02 with exactly one change (prior to commenting out the line I
   mentioned), and that was just the MAINTAINER definition.  I'm running
   on a SUN 3/50 with OS 4.0.1.  (Note: I'm using gcc-1.35 with
   -traditional to compile bash.)

   I have the following environment (using bash as my default shell):

   nolinks=1

Hey Chuck, thanks for sending me that stuff.  Now I can see that when
`nolinks' is set the bug manifests itself.  Here is the complete patch,
which also makes a static variable static:

----------------------------------------
File: ~/source/shell/builtins.c-patch
----------------------------------------
*** builtins.c.~6~	Sun Jul  9 08:56:31 1989
--- builtins.c	Mon Jul 10 14:23:23 1989
***************
*** 776,781 ****
--- 776,785 ----
     flag. */
  int follow_symbolic_links = 1;
  
+ /* In order to keep track of the working directory, we have this static
+    variable hanging around. */
+ static char *the_current_working_directory = (char *)NULL;
+ 
  cd_builtin (list)
       WORD_LIST *list;
  {
***************
*** 883,889 ****
  change_to_directory (newdir)
       char *newdir;
  {
-   extern char *the_current_working_directory;
    char *get_working_directory (), *make_absolute ();
    char *t;
  
--- 887,892 ----
***************
*** 920,938 ****
    else
      {
        if (chdir (newdir) < 0)
! 	{
! 	  file_error (newdir);
! 	  return (0);
! 	}
        else
! 	{
! 	  return (1);
! 	}
      }
  }
- 
- 
- char *the_current_working_directory = (char *)NULL;
  
  /* Return a consed string which is the current working directory.
     FOR_WHOM is the name of the caller for error printing.  */
--- 923,933 ----
    else
      {
        if (chdir (newdir) < 0)
! 	return (0);
        else
! 	return (1);
      }
  }
  
  /* Return a consed string which is the current working directory.
     FOR_WHOM is the name of the caller for error printing.  */
----------------------------------------

romine@XAGSUN.EPM.ORNL.GOV (07/11/89)

Brian,

	Glad to be of help.  Thanks for the patch.

				Chuck
				romine@msr.epm.ornl.gov

(Note: still sending to you via bug-bash@prep.ai.mit.edu because replying to
bfox@aurel.caltec bounces).