我正在构建一个小应用,当我将其交给其他团队成员进行工作时,我想抽象出他们必须直接使用args执行python脚本,而是让他们调用shell脚本自动执行。回购结构如下:
src/
app.py
module_name.py
scripts/
runAppWithArgs.sh
在runAppWithArgs.sh
中,我想到了cd ../src
,然后执行我的python代码,但是我发现,如果我以./scripts/runAppWithArgs.sh
的身份调用脚本(即从顶级目录)由于“工作目录”不是scripts/
,因此我收到了错误消息,因为它不知道如何正确地cd
进入src/
。
此问题的解决方法是什么?在较高的层次上,我想“断言” shell脚本在正确的目录上下文中运行,而我能想到的唯一解决方法似乎有点怪异,我试图从pwd
解析出工作目录然后根据需要移动到正确的目录,尽管我认为这需要一些我不愿意做的硬编码。
任何指针将不胜感激!
答案 0 :(得分:2)
通常在我的脚本中,我这样做:
dir=$(dirname "$(readlink -f "$0")")
dirname
从路径中提取目录。 readlink -f
解析所有符号链接。 $0
是(应该是)脚本的路径。因此,即使用户创建了指向脚本的符号链接,也可以使用dir
这样的符号链接。然后就这样:
cd "$dir"
../src/python_script.py
或者只是:
"$dir"/../src/python_script.py
答案 1 :(得分:0)
您可以使用if [ -d src ]; then ...
断言“ src”存在于给定的上下文中(请注意空格,因为它们是必不可少的)。因此,您可以运行python文件及其相应的路径。