我正在手动调整 Debian 初始化脚本以优化嵌入式设备的启动时间。到目前为止,我只是用“容易实现的成果”将其减少了一半。较小的脚本易于理解。
现在我只剩下一些初始化脚本,总共需要大约 20 秒才能运行。根据其他脚本的经验,我可以在这里再多争取 5 到 10 秒的时间。问题是这些脚本对我来说有点难以理解,因为它们来源了几个/lib/init/
难以遵循的帮助脚本(mount-functions.sh
是第一个罪魁祸首)。
为了使那些剩余的脚本更容易理解,以便我可以优化它们,我想要某种方法来“预处理”这些初始化脚本,以便每当它们获取文件时,它都会内联到脚本本身中(当然是递归的) ),并删除未使用的函数以使代码变得整洁。有这个工具吗?
答案1
你可以做这样的事情。我只对其进行了轻微测试,但我认为总体概念是合理的。
例子
假设您有以下文件目录:
$ ls -l
total 16
-rwxrwxr-x 1 saml saml 268 Oct 4 17:44 expander.bash
-rw-rw-r-- 1 saml saml 18 Oct 4 16:49 src_1.bash
-rw-rw-r-- 1 saml saml 20 Oct 4 16:50 src_2.bash
-rwxrwxr-x 1 saml saml 119 Oct 4 16:49 top.bash
该top.bash
文件如下所示:
$ cat top.bash
#!/bin/bash
echo "1"
echo "2"
echo "3"
echo "4"
. src_1.bash
echo "15"
echo "16"
. src_2.bash
echo "27"
echo "28"
您可以使用以下脚本expander.bash
来“扩展” top.bash
:
#!/bin/bash
while read -r line; do
if echo "$line" | grep -q '\. .*'; then
file=$(echo "$line" | sed 's/\. //')
echo "### below sourced from: $file"
cat $file
echo "### above sourced from: $file"
continue
fi
printf "%s\n" "$line"
done < top.bash
运行示例
$ ./expander.bash
#!/bin/bash
echo "1"
echo "2"
echo "3"
echo "4"
### below sourced from: src_1.bash
echo "6"
echo "7"
### above sourced from: src_1.bash
echo "15"
echo "16"
### below sourced from: src_2.bash
echo "17"
echo "18"
### above sourced from: src_2.bash
echo "27"
echo "28"
潜在的增强功能?
对于我使用的grep
和sed
,可以将它们替换以使其成为更纯粹的 Bash 解决方案。我没有花时间来做这件事,因为这是一个粗糙的原型。
最可能需要注意的第二个方面是脚本能够确定正在发生另一个文件的来源。检测到这种情况的模式可能需要根据您的情况进行“调整”。