在一個腳本中怎麼調用其餘的腳本呢?有三種方式,分別是fork、source和exec。shell
即經過sh 腳本名進行執行腳本的方式。下面經過一個簡單的例子來說解下它的特性。
建立father.sh,內容以下:bash
#!/bin/bashecho "父shell進程開始執行"sh son.sh #父shell fork子shell環境執行另外一個腳本echo "父shell進程執行完畢"
建立son.sh,內容以下:spa
#!/bin/bashecho "子shell被調用"
執行sh father.sh:code
[@sjs_59_152 ccztest]# sh father.sh父shell進程開始執行子shell被調用父shell進程執行完畢
經過以上例子,能夠知道fork的特性爲:
在一個腳本中調用另外一個腳本,被調用腳本執行完成以後返回給父shell進程,父shell進程繼續執行剩下的指令進程
即經過source或. 腳本名進行執行腳本的方式。下面經過一個簡單的例子來說解下它的特性。
建立father.sh,內容以下:test
#!/bin/bash source son.sh #經過source方式將son.sh加載到當前shell環境中 echo "father訪問son中定義的局部變量:$sonVar"
建立son.sh,內容以下:變量
#!/bin/bashsonVar="son var"echo "son定義了一個變量:sonVar=$sonVar"
執行sh father.sh:腳本
[@sjs_59_152 ccztest]# sh father.shson定義了一個變量:sonVar=son varfather訪問son中定義的局部變量:son var
經過以上例子,能夠知道source的特性爲:
source調用,是把被調用腳本加載到當前的shell環境中來執行,就好像是在一個腳本里面運行同樣,他們的定義的局部變量共享co
即經過exec 腳本名進行執行腳本的方式。下面經過一個簡單的例子來說解下它的特性。
建立father.sh,內容以下:fork
#!/bin/bashecho "父shell開始執行"exec sh son.shecho "父shell完成執行,可是這句話不會被執行"
建立son.sh,內容以下:
#!/bin/bash echo "子shell被父shell exec調用,執行權已經被搶佔過來了,不會在交回給父shell進程"
執行sh father.sh:
[@sjs_59_152 ccztest]# sh father.sh 父shell開始執行 子shell被父shell exec調用,執行權已經被搶佔過來了,不會在交回給父shell進程
經過以上例子,能夠知道exec的特性爲:
exec調用,也是fork一個子shell環境來執行被調用腳本,可是父shell環境的執行權會被剝奪,也就是執行權被交給了被調用腳本,父shell環境再也不擁有執行權,不管父shell腳本中的指令是否執行完成,都不在被執行,隨着子shell進程的結束而結束。