gpt4 book ai didi

linux - 如何在同一目录中的另一个脚本中使用 bash 脚本中的函数和变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:44 24 4
gpt4 key购买 nike

所以我想在 bash 中制作一个倒数计时器,我有两个文件-
一个用于我的闹钟功能
另一个用于在终端上显示数字

所以我的目录结构有点像这样-
父目录
|____ 闹钟.sh
|____ views.sh

我的第一次尝试是制作一个 $directory 变量并获取路径-

directory=$PWD

但是,如果我从另一个目录执行我的脚本,它会产生一个问题,因为 $directory 将是新目录而不是脚本所在的目录。

然后我尝试使用 readlink 命令-

path=$(dirname "$(readlink -f "$0")")
. $path/views.sh

然而,这会产生问题。虽然它确实有效,但在 GNU/Linux bash 中遵循链接和所有内容,它在 OSX bash 中不起作用(我认为是 BSD,但我可能是错的)。

所以我的基本问题是——如何从alarm.sh引用views.sh?有没有一种方法可以避免查找父目录名称的麻烦?

最佳答案

可能解决这个问题的最简单方法是将 alarm.sh 目录添加到 view.sh 中的 PATH:

PATH=$PATH:/path/to/alarm
source alarm.sh ...

如果您有很多脚本需要这种引用,或者如果您有很多目录需要添加到 PATH 中,那么谨慎的做法是编写一个初始化脚本来设置 PATH(以及其他需要的环境变量) )适当。然后,您可以在所有脚本中调用 init 脚本:

source /path/to/init.sh # set PATH etc
source alarm.sh

对于派生 alarm.sh 相对于 view.sh 目录的 PATH 的直接要求(参见 post),您可以这样做:

this_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
cd "$this_dir"
source alarm.sh # (or source ./path/to/alarm.sh or source ../path/to/alarm.sh)

请记住,一个好的脚本不应该对它所在的目录或调用程序的当前目录做出任何假设。

关于linux - 如何在同一目录中的另一个脚本中使用 bash 脚本中的函数和变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46978467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com