我正在手動調整 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 解決方案。我沒有花時間做這件事,因為這是一個粗糙的原型。
最可能需要注意的第二個方面是腳本能夠確定正在發生另一個文件的來源。偵測到這種情況的模式可能需要根據您的情況進行「調整」。