###Date: 2017/1/7
###Author: SoaringLee
###Content:關於shell腳本中執行cd命令無效的分析
=======================================================================
緣起:
我在shell中寫cd目錄爲什麼不會到我想去的目錄中?
shell腳本中使用cd命令進入到指定目錄後,然後執行該目錄下的命令,在執行shell腳本後發現不能進入到指定目錄中,因而後續命令會因爲找不到而報錯?
例子:
編寫shell腳本test.sh
#!/bin/sh
cd Tools/vmware-tools-distrib
pwd
在Terminal中執行./test.sh,結果如下:
soaringlee@ubuntu:~/Desktop$ ./test.sh
/home/soaringlee/Desktop/Tools/vmware-tools-distrib
soaringlee@ubuntu:~/Desktop$
因而並沒有進入到指定目錄中。
在Terminal中執行source test.sh,結果如下:
soaringlee@ubuntu:~/Desktop$ source test.sh
/home/soaringlee/Desktop/Tools/vmware-tools-distrib
soaringlee@ubuntu:~/Desktop/Tools/vmware-tools-distrib$
因此採用source命令執行該腳本,進入到了指定目錄中。
soaringlee@ubuntu:~/Desktop$ . test.sh
/home/soaringlee/Desktop/Tools/vmware-tools-distrib
soaringlee@ubuntu:~/Desktop/Tools/vmware-tools-distrib$
採用點命令運行該腳本,也可以實現進入到指定目錄中。
原因:
採用第一種方法是直接運行該腳本,會創建一個子shell,並在子shell中逐個執行腳本中的指令; 而子shell從父shell中繼承了環境變量,但是執行後不會改變父shell的環境變量;可以這樣理解:在子shell中的操作和環境變量不會影響父進程,在執行完shell後又回到了父進程。
採用第二種方法運行該腳本,source命令是在當前shell環境下執行該腳本,不會創建子shell,因而可以在shell中進入到指定目錄中。
source命令又稱爲點命令,作用:在當前shell環境下讀取並執行腳本中的命令,通常用於重新執行剛修改過的初始化文件,使之立即生效,而不必註銷並登錄。
————————————————
版權聲明:本文爲CSDN博主「飛翔0423」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/SoaringLee_fighting/article/details/78989918