關於shell腳本中執行cd命令無效的分析

###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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章