Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a batch file (.command) that I double click to do work. It has dependencies on files in the same folder, but if I double click the .command file it just launches and assumes the current location is /~

How do I find/specify the location of the .command file in the script itself, so I can refer to relative assets?

share|improve this question

If you're using bash (i.e. the script starts with #!/bin/bash), you can use $BASH_SOURCE to get the filename of the script. From that, you can get the directory it's in:

mydir="$(dirname "$BASH_SOURCE")"

...and then use that to find files relative to the script, e.g. cp "$mydir/fileInTheSameFolder" /tmp (and please always use double-quotes around it, as I did here).

Note that this may be a relative path; for example, if the script was run from an interactive shell with ./scriptname.command, it'll just come out as ".". This shouldn't be a problem unless the script cd's somewhere else, but if you need the full path you can use this instead:

mydir="$(cd "$(dirname "$BASH_SOURCE")" && pwd)" || {
    echo "Error getting script directory" >&2
    exit 1
}

Or, could just cd to the script's directory at the beginning of the script:

cd "$(dirname "$BASH_SOURCE")" || {
    echo "Error getting script directory" >&2
    exit 1
}
share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .