动态地将 bash 函数组合到新的 shell 文件中

动态地将 bash 函数组合到新的 shell 文件中

假设我有一堆文件:

a.sh
b.sh
c.sh
...
z.sh

每个文件都有一个函数,如下所示:

   a(){
      echo "fooa" | bash
    }

现在,如果我可以将所有函数放在一个文件中,它们看起来像:

   a(){
      echo "fooa" | bash
   }

   b(){
      echo "foob" | bash
   }

   c(){
      echo "fooc" | bash
   }
    ...
   z(){
      echo "fooz" | bash
   }

问题是它们实际上位于不同的文件中。我想做的是将它们动态写入一个文件,以便可以获取一个文件,而不是源 10 个或 20 个文件。

做这个的最好方式是什么?

我能做的一件事就是循环遍历这些文件并将其内容附加到我想要获取的 1 个文件中。还有其他可行的方法吗?

答案1

cat *.sh > all.sh会将所有文件连接到一个。这有点不干净,因为如果它已经存在,它*.sh也会匹配all.sh,但重定向将在此处运行all.sh之前清除cat

您也可以只编写一个脚本来获取所有其他脚本(称之为includeall.sh):

for f in *.sh; do
    if [ "$f" != "includeall.sh" ]; then
        . "$f"
    fi
done

然后使用 来获取它. includeall.sh。 这样if做是为了避免重新包含自身。不过将..脚本放在单独的目录中includeall可能不是一个坏主意。这样可以使目录结构更清晰,并且更难意外获取任何错误的脚本。在这种情况下。a.shz.shfor f in dir/*.sh; do . "$f"; done

相关内容