假设我有一堆文件:
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.sh
z.sh
for f in dir/*.sh; do . "$f"; done