"Martin F. Krafft" <[EMAIL PROTECTED]> writes:

> how can i obtain the absolute path of the script within itself,
>
>   echo `pwd`/$0,
>
> returns a POSIX-valid path like
>   /home/madduck/edu/swat/../../bin/myscript
>
> but this method only works for relative paths. if i call myscript as
> /home/madduck/bin/myscript then this method yields
>
>   /home/madduck/edu/swat//home/madduck/bin/myscript
> 
> which is a different path (and most likely invalid).
> 
> i *could* check the first character for a '/' and act accordingly, but
> there's got to be an easier way...

I'm not sure what you mean by easier (shorter, i assume), but that is
certainly not a bad way, as it can be implemented entirely using shell
builtins:

case $0 in
  /*) abspath=$0 ;;
  *) abspath=$PWD/$0 ;;
esac

echo $abspath

Off hand, I can think of only one alternative, which is quite elegant
and also normalises the pathname (removing .. and .):

abspath=$(cd ${0%/*} && echo $PWD/${0##*/})

(i.e. cd to the directory component of $0 and append the basename of
$0 to the PWD)

Interestingly, Plan9 contains a command which does exactly what you
want; see <URL:http://www.cs.bell-labs.com/magic/man2html/1/cleanname>

-- 

Leonard Stiles <[EMAIL PROTECTED]>

Reply via email to