使用 shell 脚本捆绑依赖项

use*_*000 1 shell dependencies shell-script

Shell 脚本通常必须依赖于可能未安装在用户计算机上的工具。为了规避这个问题,许多脚本有多个回退。

IMO 做这样的事情只会导致复杂的代码,并且找到一大块脚本只是为了兼容性原因并不少见。

为什么不能将依赖项仅包含在脚本中?脚本可以包含这些程序(作为附加的压缩部分,就像makeself那样),并在运行时简单地使用它们?

澄清一下,当然这不适用于wgetcurl; 在这种情况下,每个的代码将是最少的。我说的是涉及到图形用户界面的脚本,并有大量的代码来支持这样的程序(zenity/ yad/xdialog等),其中涉及完全不同的语法。

是否有原因未完成上述操作?

gol*_*cks 6

是否有原因未完成上述操作?

Shell 脚本是可移植的,因为它们使用运行时解释器。您用作示例的工具,尤其是 GUI 工具,则不是。这意味着您必须为 Linux/x86、Linux/x86-64、Linux/armel、Linux/armhf、OSX/x86-64、OpenBSD/mipsel 以及您希望在其上运行的任何其他平台提供单独的版本。

此外,这些东西的正常编译版本依赖于共享库。如果您真的不想担心依赖项但又想包含SomeGUIApp,您要么需要它的静态编译版本,要么 (6 == 2 * 3) 包含这些依赖项及其依赖项,并且... 1 无论哪种方式,此时您都会意识到您认为“只有 5 mb”的内容最终会变成数百个。现在看看你的内存消耗;如果它是一个普通的 GUI 桌面,做普通的事情,那么大部分是那些 GUI 库,等等。

作为一个长期的 linux 用户,我通常对包含二进制文件的东西感到遗憾,因为一般编译的东西可能会犯所有错误。我只会在没有其他选择的情况下实际使用它们(或者,当然,它们来自发行版)。

现在想象一下,如果每个人都这样做。SomeGUIApp我的系统上需要 15 个副本吗?最好将事物列为先决条件——如果我没有它,我可以得到它——以便为我提供我已经拥有的东西的另一个副本。

1. 或许重点是:你必须在某处画线,那为什么不画在包里的原处呢?