是否可以从任何目录运行shell脚本,但脚本会保留目录上下文的存储位置。
例如:
/projects/a/bin/myscript.sh
在项目/我有:
- app
- code
- tmp
- bin
- myscript.sh
myscript在项目应用程序和代码目录中设置了一些内容。
我希望能够从任何地方运行设置,例如:
./bin/setup.sh
或直接在bin目录中:
./setup.sh
但是上下文似乎取自运行脚本的位置而不是文件所在的位置。
答案 0 :(得分:3)
可以在$0
中找到脚本的路径。这包括脚本名称本身,因此您需要执行类似
bin=$(dirname -- "$0")
比你可以:
只需使用该变量引用其他脚本,例如:
. "$bin/utils.sh"
"$bin/../app/app"
等
进入目录;但这打破了你在命令行上获得的路径,除非你把它们变成绝对的:
cd "$bin"
记得正确引用!
答案 1 :(得分:0)
您可以像这样获取脚本目录:
SCRIPTDIR=`dirname "$0"`
然后你可以做
cd "$SCRIPTDIR"
为了让脚本的其余部分像从它的位置启动一样运行。您的位置不会被更改,只会执行脚本的位置。
或者,您只需在命令中使用$SCRIPTDIR
即可。