1. 程式人生 > >linux中shell指令碼引用另一shell指令碼

linux中shell指令碼引用另一shell指令碼

呼叫有三種方法:

1、fork:不同的shell,呼叫後返回父shell,子shell從父shell中繼承變數,但子shell的變數不會帶回父shell,直接用path/to/file.sh呼叫;

2、exec:同一個shell,呼叫後不返回,用exec path/to/file.sh呼叫;

3、source:同一個shell,呼叫後返回,用source path/to/file.sh呼叫

第一個指令碼quote1.sh,程式碼如下:

 1 #!/bin/bash
 2 #
 3 A=1
 4 echo "ID1=$$"
 5 export A
 6 echo -e "A1=$A\n"
 7 case $1
in 8 --exec) 9 echo "use exec" 10 exec ./quote2.sh;; 11 --source) 12 echo "use source" 13 source ./quote2.sh;; 14 *) 15 echo "use fork" 16 ./quote2.sh;; 17 esac 18 echo -e "\nID1=$$
" 19 echo "A1=$A"

第二個指令碼quote2.sh,程式碼如下:

1 #!/bin/bash
2 #
3 echo "A1=$A"
4 A=2
5 echo "ID2=$$"
6 export A
7 echo "A2=$A"

# chmod +x quote*  //新增許可權

# cd /root/test/script/  //進入檔案所在目錄

1、選擇fork方法

# ./quote1.sh  //無引數執行指令碼1

 兩個指令碼的程序ID號不同,所以在不同的shell下執行的,但呼叫完quote2.sh會返回繼續執行。

2、選擇exec方法

# ./quote1.sh --exec  //觀察exec執行結果

兩個程序ID號相同,所以是在同一shell下執行,但呼叫完quote2.sh就會結束。

3、選擇source方法

# ./quote.sh --source  //觀察source執行結果

兩個程序ID號相同,所以是在同一shell下執行,但呼叫完quote2.sh會返回繼續執行。