将较大的脚本拆分为多个脚本并在主脚本中获取它们是否很常见?

hel*_*hod 27 bash

目前我正在开发一个更大的 Bash 脚本(它是我的一个开源项目),它开始变得一团糟。我已将逻辑拆分为函数,尽可能使用局部变量,并且只声明了少数全局变量。尽管如此,它变得非常难以维护。

我考虑将脚本分成多个脚本并在我的主脚本中获取它们(类似于其他语言的导入)。

但我想知道这是否是一种可行的方法。首先,采购多个脚本可能会严重减慢脚本的执行时间,其次,它使分发变得更加困难。

那么,这是一个好方法吗,其他(开源)项目是否也这样做?

Jas*_*onG 16

在那个时候,shell 是适合这项工作的工具吗?作为一个遇到过代码增长问题的开发人员,我可以告诉你,不应该考虑重写,而是考虑将部分分离成更适合你希望扩展应用程序的规模的东西 - 可能是 python 或 ruby​​ 甚至 perl ?

Shell 是一种实用语言 - 它是一种脚本语言 - 因此很难将其扩展到这些大小。


Kyl*_*nes 14

是的,这是一种常见的做法。例如,在 Unix 的早期,负责引导系统从引导阶段到多用户操作的 shell 代码是单个文件/etc/rc. 今天,引导过程由许多 shell 脚本控制,按功能分解,通用功能和变量根据需要从中央位置获取。Linux 发行版、Mac、BSD 都在不同程度上采用了这种方法。

  • 虽然在这种情况下,更多的是为了可重用性。不同的脚本使用一个通用的 shell 函数库。 (2认同)

der*_*ert 7

如果它使您的维护更容易,您可以同时拥有。将其拆分为逻辑部分,以便您可以轻松维护它,然后编写(例如)一个 Makefile 将其全部放回一起分发 您可以编写一些快速脚本将函数从包含文件复制到输出文件,以代替该source行或只是做一些琐碎的这样的(你必须重新tabify这一点,因为make需要标签):

all: myscript

myscript: includes/* body/*
    cat $^ > "$@" || (rm -f "$@"; exit 1)
Run Code Online (Sandbox Code Playgroud)

然后您有一个“源”版本(用于编辑)和一个“二进制”版本(用于简单安装)。