On Thu, 11 Feb 2010, Eric Blake wrote:
> According to Chris F.A. Johnson on 2/11/2010 4:23 PM:
> > On Fri, 12 Feb 2010, Peng Yu wrote:
> >
> >> $0 gives the file name of the script. I could use several shell
> >> command to get the directory where the script is in. But I'm wondering
> >> if there is an easy-to-use variable that refers to the directory where
> >> the script is in?
> >
> > $0 normally gives the full path to the file, so: "${0%/*}"
>
> No, $0 normally gives the argv[0], which matches how the file was invoked.
Or, if it was found in $PATH, the full path to the file.
That is how scripts are "normally" executed.
> If it was invoked by absolute path (or even an anchored invocation, such
> as ./script), then you can compute it yourself.
>
> Otherwise, you have to
> recreate the PATH walk in your script to determine where the script was
> eventually located, and hope that the script was not invoked in such a way
> that argv[0] does not match the name of the script being run.
>
> Look at any configure script generated by autoconf for a sample of how
> complex it can be to portably locate $myself.
And, of course, there is rarely a good reason to need to know the
location.
--
Chris F.A. Johnson <http://cfajohnson.com>
===================================================================
Author:
Shell Scripting Recipes: A Problem-Solution Approach (2005, Apress)
Pro Bash Programming: Scripting the GNU/Linux Shell (2009, Apress)