[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Is there a special variable for the directory where the script is in
From: |
Chris F.A. Johnson |
Subject: |
Re: Is there a special variable for the directory where the script is in? |
Date: |
Thu, 11 Feb 2010 20:34:09 -0500 (EST) |
User-agent: |
Alpine 2.00 (LMD 1167 2008-08-23) |
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)