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)