一易遣、子shell
1彼妻、子shell,即從當(dāng)前shell環(huán)境新開一個shell環(huán)境,這個新開的shell環(huán)境就稱為子shell(subshell)
2侨歉、新開啟子shell的環(huán)境稱為該子shell的父shell
3屋摇、子shell和父shell的關(guān)系其實就是子進(jìn)程和父進(jìn)程的關(guān)系
4、每個腳本都在當(dāng)前環(huán)境的一個子shell中運(yùn)行
二幽邓、局部變量與環(huán)境變量
了解了子shell
的概念后炮温,可以做一個簡單的測試
#!/bin/bash
echo "var1=$var1"
echo "var2=$var2"
var2=1
echo "var2=$var2"
image.png
結(jié)論:
-
父shell
,會將所有export
的環(huán)境變量傳遞給子shell
牵舵,子shell
修改環(huán)境變量的值柒啤,不會影響父shell
-
子shell
讀取不到父shell
的局部變量
三、shell中啟動java進(jìn)程
public class Test {
public static void main(String[] args) {
System.out.println(System.getenv("var1"));
}
}
#!/bin/bash
var1=1
java Test
image.png
刪除環(huán)境變量畸颅,修改腳本
#!/bin/bash
export var1=0
java Test
image.png
結(jié)論:
+
shell
中啟動的java
進(jìn)程白修,環(huán)境變量為當(dāng)前腳本所在子shell
的環(huán)境變量+
父shell
定義的環(huán)境變量,在子shell
中可直接修改重斑,但只影響子shell
四兵睛、source
由以上測試可知,shell
腳本導(dǎo)出的環(huán)境變量不會影響當(dāng)前登錄的shell
環(huán)境窥浪,而source
命令可將腳本中的環(huán)境變量導(dǎo)出到當(dāng)前shell
#!/bin/bash
export var=1
image.png
- 登錄
shell
時會自動執(zhí)行source /etc/profile
-
/etc/profile
中引用了/etc/profile.d
下的所有腳本 -
source fileName
簡寫為. fileName