如何组织 $HOME 中已安装的程序以便 shell 在运行时搜索它们?

如何组织 $HOME 中已安装的程序以便 shell 在运行时搜索它们?

我已经编写或下载了一些程序(bash脚本、python脚本、java程序、C程序)并将它们放在/home/t/program_files/.对于每个程序,我在路径下创建一个目录,并将该程序的所有文件放置在该目录中。我什至根据主题的相似性对程序进行分组,进一步创建OSnetwork、 和等目录document,并将每个程序的目录移动到此类目录之一。我觉得这种方式可以帮助我以逻辑的方式管理程序,并且我可以更快地找到程序的文件。

如果我想运行程序,我必须将所有程序的搜索路径指定为PATH.手动找出每个脚本或可执行文件的路径并将其添加到$PATH.一种快速方法是递归地添加到PATH的所有后代目录/home/t/program_files/,但这种方式的问题是,它会添加不直接包含可执行文件或脚本文件,而是包含其他文件(例如 Java 和 C 源文件)的目录,并且 shell 中将有太多路径来PATH搜索命令相当长的一段时间。

有哪些好的方法可以解决上述问题呢?

  • 吉尔斯的回复建议使用斯托。在阅读了一些有关 Stow 的内容后,我了解到它会创建符号链接,并且符号链接仍然以与其目标文件相同的方式组织,如果我是正确的,这对解决指定程序搜索路径的问题没有帮助。我是否错过了有关 Stow 的一些可以帮助解决我的问题的信息?

  • 其他方式我想知道的是在 下递归地/home/t/program_files/检查每个文件是否可运行,如果是,则在下创建一个符号链接/home/t/bin/,也许还将其父目录的路径名添加到PATH.

  • 此外,我相信人们需要创建和下载第三方程序并希望将它们安装在他们的主目录中是很常见的。有哪些推荐的组织此类计划的方法?他们组织程序时不是把每个程序的所有文件放在自己的目录中吗?

谢谢。

答案1

我没有经验stow,也不知道,但我可以建议一些逻辑作为您问题的答案,也可以使用链接。

正如您所写,您将程序保存在/home/t/program_files/.假设您GHR_Communicator在文件夹中有一个名为 的程序communicators,该程序在路径下有一个可执行文件ghrc

/home/t/program_files/communicators/GHR_Communicator/ghrc

现在假设您为私有可执行文件指定一个公共文件夹为/home/t/bin.这将是您需要包含在PATH变量中的唯一文件夹。在某些发行版中PATH默认包含它,因此请检查您的PATH版本并在需要时添加它。

要能够ghrc通过这个简单的名称进行调用,您唯一需要做的就是创建一个~/bin指向可执行文件的链接。

$ ln -sr ~/program_files/communicators/GHR_Communicator/ghrc ~/bin

现在只需致电ghrc

$ ghrc

你已经执行了它。

答案2

我同意吉尔斯的观点,斯托可能是完成这项工作的正确工具。 Stow的基本模型是,将软件安装到特定的目录中,每个软件一个;在装载手册您会发现 Perl 和 Emacs 用作示例,分别安装在/usr/local/stow/perl和中/usr/local/stow/emacs。在这些目录中,您将具有通常的结构 -binshare。Stow 通过将目录和/或文件符号链接到目标(通常为 )来“安装”软件/usr/local。安装perl将确保它/usr/local/stow/perl/bin/perl可以作为/usr/local/bin/perl等使用。因此,您只需要/usr/local/bin在您的 PATH 上添加...

Stow 可以被告知使用多个存放目录,这应该可以解决你的问题。只要每个单独的软件具有与 下的典型目录结构相匹配的目录结构/usr/local,就可以通过 Stow 进行管理。

Stow 也适用于存储在主目录下、具有各种结构的程序。这样您就可以将程序安装到单独的目录中,但仍然可以从单个共享目录中使用它们(例如 ~/.local/bin)。

从源代码构建程序时,Stow 的一般方法是使用./configure最终目标前缀 ( /usr/local) 运行(或等效方法),并使用 Stow 目录内的目标目录安装软件(例如,/usr/local/stow/perl在手册;但/usr/local/Programming/perl也可以用作/usr/local/ProgrammingStow 目录)。然后,您可以使用 Stow 通过添加适当的符号链接来使软件可用。

相关内容