she編程執行方式

在一個腳本中怎麼調用其餘的腳本呢?有三種方式,分別是fork、source和execshell

1. fork

即經過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進程繼續執行剩下的指令進程

2. source

即經過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

3. exec

即經過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進程的結束而結束。

相關文章
相關標籤/搜索