从任何目录运行脚本

时间:2013-10-01 12:15:46

标签: linux bash shell ubuntu

是否可以从任何目录运行shell脚本,但脚本会保留目录上下文的存储位置。

例如:

/projects/a/bin/myscript.sh

在项目/我有:

- app
- code
- tmp
- bin
    - myscript.sh

myscript在项目应用程序和代码目录中设置了一些内容。

我希望能够从任何地方运行设置,例如:

./bin/setup.sh

或直接在bin目录中:

./setup.sh

但是上下文似乎取自运行脚本的位置而不是文件所在的位置。

2 个答案:

答案 0 :(得分:3)

可以在$0中找到脚本的路径。这包括脚本名称本身,因此您需要执行类似

的操作
bin=$(dirname -- "$0")

比你可以:

  • 只需使用该变量引用其他脚本,例如:

    . "$bin/utils.sh"
    "$bin/../app/app"
    

  • 进入目录;但这打破了你在命令行上获得的路径,除非你把它们变成绝对的:

    cd "$bin"
    

记得正确引用!

答案 1 :(得分:0)

您可以像这样获取脚本目录:

SCRIPTDIR=`dirname "$0"`

然后你可以做

cd "$SCRIPTDIR"

为了让脚本的其余部分像从它的位置启动一样运行。您的位置不会被更改,只会执行脚本的位置。

或者,您只需在命令中使用$SCRIPTDIR即可。