我对 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
。但是,根据问题开头的说法,这是启动该进程的脚本。它不可能是脚本和一个目录,因此代码此时失败。