1

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

例如:

/projects/a/bin/myscript.sh

在项目/人工智能中有:

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

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

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

./bin/setup.sh

或直接在 bin 目录中:

./setup.sh

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

4

2 回答 2

3

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

bin=$(dirname -- "$0")

比你可以:

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

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

    等等

  • 进入目录;但这会破坏您在命令行上获得的路径,除非您将它们设为绝对路径:

    cd "$bin"
    

记得正确引用!

于 2013-10-01T12:19:45.427 回答
0

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

SCRIPTDIR=`dirname "$0"`

然后你可以做

cd "$SCRIPTDIR"

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

或者,您可以简单地$SCRIPTDIR在命令中使用。

于 2013-10-01T12:18:23.123 回答