1,875 瀏覽數

Linux command – source script, . script , ./script , sh script

執行 bash sh 有這幾種方式, source script, .script , sh script, ./script ,雖然都是執行但是卻有不一樣的效果
為了觀察這幾種不同的行為先寫個 script 來看看.

# vi ben.sh
#!/bin/bash
echo -n "Press [Enter] key to continue..."
read
#chmod a+x ben.sh

Script 很簡單,就是等待使用者輸入資料,我們主要的目的就是希望程式可以暫停住,不需要觀察時按 任一鍵就可以回去原來的 Shall.

  • source script, . script

    執行

    # source ben.sh
    Press [Enter] key to continue...
    

    # . ben.sh
    Press [Enter] key to continue...
    

    觀察,須要另外一個 console 來觀察,我用兩個 SSH 來連線觀察.

    #pstree
    
         |-sshd-+-sshd---bash
         |      `-sshd---bash---pstree
    

    可以看到 ben.sh 主要還是運行在父行程,並沒有新創建子行程出來,這樣的執行出來的 變數結果 可以被存儲下來.不會因為執行完成後記憶體管理程式就把所有的變數結果回收回去.

  • ./script , sh script

    #./ben.sh
    Press [Enter] key to continue...
    

    觀察,須要另外一個 console 來觀察,我用兩個 SSH 來連線觀察.

    #pstree
    
       |-sshd-+-sshd---bash---ben.sh
         |      `-sshd---bash---pstree
    

    可以看到一個新的子行程 ben.sh 被執行出來.

    # sh ben.sh
    Press [Enter] key to continue...
    

    觀察,須要另外一個 console 來觀察,我用兩個 SSH 來連線觀察.

    #pstree
    
         |-sshd-+-sshd---bash---sh
         |      `-sshd---bash---pstree
    

    可以看到一個新的子行程 sh 被執行出來.

可以看出這兩種執行結果所採用的方式大不同,不可不小心.

發表迴響