如何包含来自不同文件夹的shell脚本的函数

如何包含来自不同文件夹的shell脚本的函数,shell,directory-structure,Shell,Directory Structure,我有一个类型为的目录结构 |--bringup-scripts | |--prep.sh |--scripts | |--i2c0.func | |--bit.func prep.sh如下所示: #!/bin/bash . ../scripts/i2c0.func #!/bin/sh . ./bit.func i2c0.func如下所示: #!/bin/bash . ../scripts/i2c0.func #!/bin/sh . ./bit.func 由于i2c

我有一个类型为的目录结构

|--bringup-scripts
|  |--prep.sh
|--scripts
|  |--i2c0.func
|  |--bit.func
prep.sh如下所示:

#!/bin/bash

. ../scripts/i2c0.func

#!/bin/sh

. ./bit.func

i2c0.func如下所示:

#!/bin/bash

. ../scripts/i2c0.func

#!/bin/sh

. ./bit.func

由于i2c0.func依赖于bit.func,如果我从bringup scripts文件夹运行prep.sh,它会抛出一个错误

./bit.func:没有这样的文件或目录


我应该如何解决这个问题?

我不知道是否有标准的方法来解决这个问题,但您可以尝试更改i2c0.func如下:

#!/bin/bash

export ROOT_DIR="$(dirname $PWD)"

. $ROOT_DIR/scripts/i2c0.func
#/垃圾箱/垃圾箱
. ../脚本/bit.func

尽管noteprep.sh会获取调用方的工作目录,因此只有当您从
bringup scripts/
scripts/
运行它时,它才会工作。您可以做的是不使用相对路径,而是为prep.sh文件中的所有脚本定义一个起点,如下所示:

#!/bin/bash

export ROOT_DIR="$(dirname $PWD)"

. $ROOT_DIR/scripts/i2c0.func
您还必须将
$ROOT\u DIR
作为脚本目录中每个脚本的前缀,例如:

i2c0.func

#!/bin/sh

. $ROOT_DIR/scripts/bit.func

谢谢,但是scripts文件夹中也有一些文件,它们使用i2c0.func文件,这对您来说不是很有效them@YashGupta怎么不呢?我不确定性能效率,但我想有一些更通用的,因为我有许多类似的依赖关系