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)


Reply via email to