Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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
add comment

1 Answer

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
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.