[vox-tech] Identifying the directory that contains the currently running executable?

Matt Roper matt at mattrope.com
Fri Aug 27 11:04:42 PDT 2004


On Fri, Aug 27, 2004 at 10:28:27AM -0700, Ken Bloom wrote:
...
> Is there a way to identify the directory that contains the currently
> running script in bash? i.e. if I'm running /home/bloom/bin/foo in
> /bin/bash, and pwd is /home/bloom, how can I programmatically get
> either /home/bloom/bin/foo or /home/bloom/bin to refer to it?
> (This would be particularly nice when using calling `java -classpath`
> from a shell script wrapper)

$0 has already been suggested, but looking at the bash reference manual,
it sounds like $_ might also be useful:

    (An underscore.) At shell startup, set to the absolute filename of
    the shell or shell script being executed as passed in the argument
    list. Subsequently, expands to the last argument to the previous
    command, after expansion. Also set to the full pathname of each
    command executed and placed in the environment exported to that
    command. When checking mail, this parameter holds the name of the
    mail file.

I haven't actually tried that, but it sounds like you'd need to capture
it as the first command of your shell script.

> Are there ways to do this in other scripting languages (e.g. perl)?

This should work in Perl:

    #!/usr/bin/perl
    use FindBin;

    print $FindBin::Bin, "\n";


Matt

-- 

*************************************************
* Matt Roper <matt at mattrope.com>                *
* http://www.mattrope.com                       *
* PGP Key: http://www.mattrope.com/mattrope.asc *
*************************************************


More information about the vox-tech mailing list