詳解shell中source、sh、bash、./執行腳本的區別

這篇文章主要介紹了shell中source、sh、bash、./執行腳本的區別,需要的朋友可以參考下

1、source命令用法:

  source FileName

  作用:在當前bash環境下讀取並執行FileName中的命令。該filename文件可以無"執行權限"

    注:該命令通常用命令“.”來替代。

    如:source .bash_profile

        . .bash_profile兩者等效。

    source(或點)命令通常用於重新執行剛修改的初始化文檔。

    source命令(從 C Shell 而來)是bash shell的內置命令。

    點命令,就是個點符號,(從Bourne Shell而來)。

2、sh和bash命令用法:

     sh FileName

     bash FileName

     作用:在當前bash環境下讀取並執行FileName中的命令。該filename文件可以無"執行權限"

     注:兩者在執行文件時的不同,是分別用自己的shell來跑文件。

   sh使用“-n”選項進行shell腳本的語法檢查,使用“-x”選項實現shell腳本逐條語句的跟蹤,

   可以巧妙地利用shell的內置變量增強“-x”選項的輸出信息等。

3、./的命令用法:

     ./FileName

     作用:打開一個子shell來讀取並執行FileName中命令。

     注:運行一個shell腳本時會啓動另一個命令解釋器.

         每個shell腳本有效地運行在父shell(parent shell)的一個子進程裏.

            這個父shell是指在一個控制終端或在一個xterm窗口中給你命令指示符的進程.

         shell腳本也可以啓動他自已的子進程.

            這些子shell(即子進程)使腳本並行地,有效率地地同時運行腳本內的多個子任務.

shell的嵌入命令:

: 空,永遠返回爲true
.   從當前shell中執行操作
break 退出for、while、until或case語句
cd 改變到當前目錄
continue 執行循環的下一步
echo 反饋信息到標準輸出
eval 讀取參數,執行結果命令
exec 執行命令,但不在當前shell
exit 退出當前shell
export 導出變量,使當前shell可利用它
pwd 顯示當前目錄
read 從標準輸入讀取一行文本
readonly 使變量只讀
return 退出函數並帶有返回值
set 控制各種參數到標準輸出的顯示
shift 命令行參數向左偏移一個
test 評估條件表達式
times 顯示shell運行過程的用戶和系統時間
trap 當捕獲信號時運行指定命令
ulimit 顯示或設置shell資源
umask 顯示或設置缺省文件創建模式
unset 從shell內存中刪除變量或函數
wait 等待直到子進程運行完畢

下面再看下 shell 腳本各種執行方式(source ./*.sh, . ./*.sh, ./*.sh)的區別

結論一: ./*.sh的執行方式等價於sh ./*.sh或者bash ./*.sh,此三種執行腳本的方式都是重新啓動一個子shell,在子shell中執行此腳本。

結論二: .source ./*.sh和 . ./*.sh的執行方式是等價的,即兩種執行方式都是在當前shell進程中執行此腳本,而不是重新啓動一個shell 而在子shell進程中執行此腳本。

驗證依據:沒有被export導出的變量(即非環境變量)是不能被子shell繼承的

驗證結果:

[root@localhost ~]#name=dangxu    //定義一般變量 
[root@localhost ~]# echo ${name} 
dangxu 
[root@localhost ~]# cat test.sh   //驗證腳本,實例化標題中的./*.sh 
#!/bin/sh 
echo ${name} 
[root@localhost ~]# ls -l test.sh  //驗證腳本可執行 
-rwxr-xr-x 1 root root 23 Feb 6 11:09 test.sh 
[root@localhost ~]# ./test.sh    //以下三個命令證明了結論一 
[root@localhost ~]# sh ./test.sh 
[root@localhost ~]# bash ./test.sh 
[root@localhost ~]# . ./test.sh   //以下兩個命令證明了結論二 
dangxu 
[root@localhost ~]# source ./test.sh 
dangxu 
[root@localhost ~]# 

總結

以上所述是小編給大家介紹的shell中source、sh、bash、./執行腳本的區別,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對神馬文庫網站的支持!

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