声明外壳脚本从所需目录运行

时间:2019-09-05 16:47:17

标签: bash shell

我正在构建一个小应用,当我将其交给其他团队成员进行工作时,我想抽象出他们必须直接使用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解析出工作目录然后根据需要移动到正确的目录,尽管我认为这需要一些我不愿意做的硬编码。

任何指针将不胜感激!

2 个答案:

答案 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文件及其相应的路径。