bash脚本获取位于另一个目录中的bash脚本

时间:2018-05-19 15:58:39

标签: bash

在bash脚本中,我尝试使用$(dirname "$BASH_SOURCE")获取另一个位于另一个目录中的bash脚本。 $(dirname "$BASH_SOURCE")目前/Users/dank/code/<PROJECT>/utils/jwt的位置。

.
|__ utils
    |__ jwt
    |   |__ rand.sh
    |   |__ get_jwt.sh # this sources id/create_new_user.sh
    |
    |__ id
        |__ create_new_user.sh

从项目根目录.cd /Users/dank/code/<PROJECT>),我正在运行./utils/jwt/get_jwt.sh(相当于/Users/dank/code/<PROJECT>/utils/jwt/get_jwt.sh)。由于./utils/id/create_new_user.sh/Users/dank/code/<PROJECT>/utils/jwt/../id/get_jwt.sh,此bash脚本会在$(dirname "$BASH_SOURCE")(相当于/Users/dank/code/<PROJECT>/utils/jwt)内来源并调用一个函数。

但是我看到一种奇怪的行为,如果我不从rand.sh(来自同一目录),我无法从id/create_new_user.sh(来自另一个目录)获取:

source $(dirname "$BASH_SOURCE")/rand.sh # Why do I have to have this LOC?
source $(dirname "$BASH_SOURCE")/../id/create_new_user.sh # Does not work without above LOC

如果删除source $(dirname "$BASH_SOURCE")/rand.sh,我会收到错误:

./utils/jwt/../id/create_new_user.sh: line 9: ./utils/jwt/create_new_user.sh: No such file or directory

为什么我必须来源rand.sh?为什么我不能只提供我需要的脚本?

1 个答案:

答案 0 :(得分:1)

我看不出你为什么需要rand.sh。

我只是尝试使用以下代码复制您的情况:

utils/jwt/get_jwt.sh

#!/bin/bash

echo 'Get jwt'
source $(dirname "$BASH_SOURCE")/../id/create_new_user.sh
echo 'All done'

utils/id/create_new_user.sh

#!/bin/bash

echo 'create new user'

使用./utils/jwt/get_jwt.sh运行此操作会创建预期的输出:

Get jwt
create new user
All done

以所描述的方式获取文件是有效的,您的问题必须是您脚本中的其他内容。