On Mon, Feb 14, 2011 at 11:31:18AM +0000, David Julio wrote: > Is the exit status of which(1)/whereis(1) correct? > > $ which a b c > which: a: Command not found > which: b: Command not found > which: c: Command not found > > $ echo $? > 2 > > $ which -a a b c > which: a: Command not found > which: b: Command not found > which: c: Command not found > > $ echo $? > 1 > > If it is incorrect, below is my attempt to contribute. > > Thank you for your time. >
this command is not covered by posix, so there's no reference there. neither free nor netbsd document exit status for this command either. i have no access to such systems, but maybe someone who does can tell us how other bsd behave? if it's a doc bug, it can be fixed easy enough. that would seem strange behaviour though. if it's a software bug, any developer want to look at this? jmc > Index: which.c > =================================================================== > RCS file: /cvs/src/usr.bin/which/which.c,v > retrieving revision 1.16 > diff -u -r1.16 which.c > --- which.c 31 May 2010 14:01:49 -0000 1.16 > +++ which.c 14 Feb 2011 11:02:10 -0000 > @@ -55,11 +55,7 @@ > > (void)setlocale(LC_ALL, ""); > > - if (argc == 1) > - usage(); > - > - /* Don't accept command args but check since old whereis(1) used to */ > - while ((ch = getopt(argc, argv, "a")) != -1) { > + while ((ch = getopt(argc, argv, "a")) != -1) > switch (ch) { > case 'a': > allmatches = 1; > @@ -67,7 +63,11 @@ > default: > usage(); > } > - } > + argc -= optind; > + argv += optind; > + > + if (argc == 0) > + usage(); > > /* > * which(1) uses user's $PATH. > @@ -98,11 +98,11 @@ > if (setuid(geteuid())) > err(1, "Can't set uid to %u", geteuid()); > > - for (n = optind; n < argc; n++) > + for (n = 0; n < argc; n++) > if (findprog(argv[n], path, progmode, allmatches) == 0) > notfound++; > > - exit((notfound == 0) ? 0 : ((notfound == argc - 1) ? 2 : 1)); > + exit((notfound == 0) ? 0 : ((notfound == argc) ? 2 : 1)); > } > > int