In <[EMAIL PROTECTED]>, Dag-Erling Smørgrav <[EMAIL PROTECTED]> typed:
> Mike Meyer <[EMAIL PROTECTED]> writes:
> > In <[EMAIL PROTECTED]>, Dag-Erling Smørgrav <[EMAIL PROTECTED]> typed:
> > > You got it the wrong way around.  First pass argv[0] to realpath(3),
> > > fall back to using $PATH only if realpath(3) fails (which it shouldn't
> > > unless you've called chdir(2), chroot(2) or jail(2) earlier in the
> > > process, or the executable was moved or removed)
> > No, I got it the right way 'round. If the shell walks the PATH, then
> > calling realpath(3) on argv[0] is the wrong thing to do, as it'll
> > resolve the path relative to the pwd.
> 
> but argv[0] is either an absolute path or a path relative to pwd,
> unless your shell is broken.
> 
> [EMAIL PROTECTED] ~% cat >bin/foo
> #!/bin/sh
> echo $0 $@
> [EMAIL PROTECTED] ~% chmod a+rx bin/foo
> [EMAIL PROTECTED] ~% ./bin/foo
> ./bin/foo
> [EMAIL PROTECTED] ~% foo
> /home/des/bin/foo

That's happening because sh does the path search on argv[0] (if it
would have done it when you executed the command) and uses the result
instead of argv[0] for $0. If you try it in C, it doesn't work:

bhuda% cat >foo.c
#include <stdio.h>

main(int argc, char **argv) {

  printf("%s\n", argv[0]) ;
}
bhuda% cc foo.c -o bin/foo
bhuda% ./bin/foo
./bin/foo
bhuda% foo
foo
bhuda% 

Changing shells to /bin/sh or bin/csh doesn't change things.

        <mike
-- 
Mike Meyer <[EMAIL PROTECTED]>          http://www.mired.org/consulting.html
Independent Network/Unix/Perforce consultant, email for more information.
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to