Bash 程序中嵌套文件夹的深度有多深才算太深?

Bash 程序中嵌套文件夹的深度有多深才算太深?

我对 Bash 还不太熟悉,正在编写一个程序来在每个可用的 Linux 发行版上安装 .NET SDK 和运行时。

我遇到的问题是,我试图从我创建的两个库中获取函数,(sdk_库) 和 (运行时库) 都在库调用中 (函数库)。我不确定是否要为 sdk 和运行时创建单独的库,所以它们合二为一。当我尝试从另一个脚本获取源代码时(安装程序) 位于另一个名为 (distro_安装程序)。

为了获取我正在执行的文件:

source "../function_Libraries/sdk_Library"

在 main.sh 文件中我正在执行以下操作:

source "./distro_Installers/<distro-name>_Installer.sh"

当我运行(main.sh)脚本时,我最初获得了我需要的一切,但是当它到达(_Installer.sh)脚本时,我获得了除源之外的所有内容,然后出现错误:

./distro_Installers/<distro-name>_Installer.sh: line 6: ../function_Libraries/sdk_Library/: No such file or directory

我找到了有关该错误的帖子并尝试了一些解决方案,但没有一个能专门解决我的问题,我认为这可能是由于文件夹结构的嵌套造成的。他们说这是 Windows 的错误,但我使用的是 Linux(Pop && Fedora)。此外,Fedora 在虚拟机上,而这正是我创建、测试和运行程序的地方。

我找到的解决方案的链接是:

所以我的问题是“Bash 程序中嵌套文件夹的深度有多深才算太深?”

我的文件夹结构如下:

LINUX_DOT-NET_INSTALLER
- distro_Installers
    - <distro-name>_Installer.sh
    - <distro-name>_Installer.sh
- function_Libraries
    - runtime_Library
        - aspnetcore_7.sh
        - dotnet_7.sh
    - sdk_Library
        - sdk_6.sh
        - sdk_7.sh
- README.md
- distros.txt
- main.sh

答案1

让我们详细看看到底发生了什么。

首先,您sdk_library在当前 shell 的上下文中执行:

source "../function_Libraries/sdk_Library"

您可能位于该目录中function_Libraries,也可能位于同一级别的另一个目录中。(您需要向上移动 ( ..) 并向下移动 ( function_Libraries) 才能到达目标文件。)

然后你提到了main.sh,但不清楚它在哪里。如果没有目录路径,那么它一定在你当前的目录中。

同样,您提到_Installer.sh,我再次假设它在您当前的目录中。

然后你会得到一个错误:

./distro_Installers/<distro-name>_Installer.sh: line 6: ../function_Libraries/sdk_Library/: No such file or directory

请记住,除非您告诉我们您的某个脚本中有一个cd命令,否则我们必须假设您仍然位于原始当前目录中,该目录位于 旁边function_Libraries。因此,路径解析器会向上一级(..)并向下进入function_Libraries。到目前为止一切正常。

但随后它尝试进入名为 的目录sdk_Library。但是,根据问题开头的说法,这是启动该进程的脚本。它不可能是脚本一个目录,因此代码此时失败。

相关内容