简体   繁体   中英

How to execute from any directory Bash script that sources other Bash scripts (not using path variable)

I am not trying to execute a Bash script from any directory by adding the script to my Path variable.

I want to be able to execute the script from any directory using the directory path to that file ... but the file I want to execute sources other files, that is the problem.

If I am in directory file with two scripts myFunctions.sh and sourceFunctions.sh

sourceFunctions.sh

#!/bin/bash
source ./myFunctions.sh
echoFoo

myFunctions.sh

function echoFoo()
{
    echo "foo"
}

I can run myFunctions.sh and foo will print to console, but If I go up a directory and run myFunctions.sh I get error

cd ..
file/sourceFunctions.sh
-bash: doFoo.sh: command not found

Unless I changed source file/myFunctions.sh to source file/myFunctions.sh in sourceFunctions.sh .

So how can I source independent of my working directory so I can run sourceFunctions.sh from any working directory I want?

Thanks

You have the right idea. Doesn't need to be that complicated though:

source `dirname $0`/myFunctions.sh

I often compute "HERE" at the top of my script:

HERE=`dirname $0`

and then use it as needed in my script:

source $HERE/myFunctions.sh

One thing to be careful about is that $HERE will often be a relative path. In fact, it will be whatever path you actually used to run the script, or "." if you provided no path. So if you "cd" within your script, $HERE will no longer be valid. If this is a problem, there's a way (can't think of it off hand) to make sure $HERE is always an absolute path.

I ended up just using a variable of the directory path to the script itself for the source directory

so

#!/bin/bash
source ./myFunctions.sh
echoFoo

becomes

#!/bin/bash
SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
source ${SCRIPTPATH}/myFunctions.sh
echoFoo

source

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM