如何从其他文件夹的shell脚本中包含函数

问题描述 投票:1回答:2

我有一个类型的目录结构

|--bringup-scripts
|  |--prep.sh
|--scripts
|  |--i2c0.func
|  |--bit.func

prep.sh看起来像这样:

#!/bin/bash

. ../scripts/i2c0.func

i2c0.func看起来像这样:

#!/bin/sh

. ./bit.func

由于i2c0.func对bit.func存在依赖关系,如果我从bringup-scripts文件夹运行prep.sh,则会抛出错误说

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

我该如何解决这个问题?

shell directory-structure
2个回答
1
投票

您可以做的是不使用相对路径,而是为prep.sh文件中的所有脚本定义一个起点,如下所示:

#!/bin/bash

export ROOT_DIR="$(dirname $PWD)"

. $ROOT_DIR/scripts/i2c0.func

你必须包括$ROOT_DIR作为脚本目录中每个脚本的前缀,例如:

i2c0.func

#!/bin/sh

. $ROOT_DIR/scripts/bit.func

0
投票

我不知道是否有标准方法可以做到这一点,但您可以尝试更改i2c0.func,如下所示:

#!/bin/sh

. ../scripts/bit.func

虽然注意prep.sh获取其调用者的工作目录,但只有当你从bringup-scripts/scripts/运行它时它才会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.