/etc/init.d/rcS源碼如下:
#! /bin/sh
/bin/mount -a
for initscript in /etc/init.d/S[0-9][0-9]*
do
if [ -x $initscript ] ;
then
echo "[RCS]: $initscript"
$initscript
fi
done
#! /bin/sh
參見https://blog.csdn.net/lyc417356935/article/details/51979485。
shell中#一般表示註釋的意思,所以很多時候認爲#!也是註釋,但實際上不是,和c語言中頭文件一樣是聲明文件的路徑。
#! /bin/sh 是指此腳本使用/bin/sh 來執行
#!是特殊的表示符,其後面跟的是解釋此腳本的shell的路徑,如果沒有聲明,則腳本將在默認的shell中執行,默認shell是由用戶所在的系統定義爲執行shell腳本。
/bin/mount -a
mount -a 就是重新加載fstab文件中的內容。
命令使用格式:mount [-fnrsvw] [-t vfstype] [-o options] device dir
-a:自動掛載所有支持自動掛載的設備;(定義在了/etc/fstab文件中,且掛載選項中有“自動掛載”功能)。
for initscript in /etc/init.d/S[0-9][0-9]*
這句話的意思是遍歷/etc/init.d/下的以名稱爲S開頭的,緊接着是數字0-9,再緊跟着還是數字0-9,再往後有多少字符不限制的文件。聽起來比較費解,舉幾個例子就明白了:
1. S00 - 符合條件;
2. S99 - 符合條件;
3. S56 - 符合條件;
4. S0 - 不符合條件(S後必須是至少2個數字);
5. S000 - 符合條件;;
6. S999 - 符合條件;
7. S99A - 符合條件;
8. S0909 - 符合條件;
9. S - 不符合條件(S後邊至少跟2個0-9其中之一的數字);
10. SA - 不符合條件(S後邊必須跟0-9,其他的不行);
11. S0B - 不符合條件(雖然S0符合條件,但再下一個依然需要跟0-9其中之一的數字)。
實際/etc/init.d/rcS/下的內容如下:
~ # ls /etc/init.d/
S00devs S01udev S80network S99app rcS
也就是說initscript依次爲S00devs、S01udev、S80network、S99app。
do
if [ -x $initscript ] ;
then
echo "[RCS]: $initscript"
$initscript
fi
done
這段代碼的意思是:依次檢測$initscript,即S00devs、S01udev、S80network、S99app是否可執行,如果可執行,則給出提示,並且執行之;否則不執行。
至此,海思平臺下的/etc/init.d/rcS就解析完了,內容相對比較簡單。