shell 中調用另一個shell (fork, exec, source)

來源:互聯網
上載者:User

FROM : http://mindream.wang.blog.163.com/blog/static/2325122220084624318692/

    fork  ( /directory/script.sh)

    fork是最普通的, 就是直接在指令碼裡面用/directory/script.sh來調用script.sh這個指令碼.

    啟動並執行時候開一個sub-shell執行調用的指令碼,sub-shell執行的時候, parent-shell還在。

    sub-shell執行完畢後返回parent-shell. sub-shell從parent-shell繼承環境變數.但是sub-shell中的環境變數不會帶回

parent-shell

    exec (exec /directory/script.sh)

    exec與fork不同,不需要新開一個sub-shell來執行被調用的指令碼.  被調用的指令碼與父指令碼在同一個shell內執行。但

是使用exec調用一個新指令碼以後, 父指令碼中exec行之後的內容就不會再執行了。這是exec和source的區別

    source (source /directory/script.sh 也可以用點命令,即 .

/directory/script.sh)

    與fork的區別是不新開一個sub-shell來執行被調用的指令碼,而是在同一個shell中執行. 所以被調用的指令碼中聲明的

變數和環境變數, 都可以在主指令碼中得到和使用.


可以通過下面這兩個指令碼來體會三種調用方式的不同:

1.sh 

    #!/bin/bash
    A=B
    echo "PID for 1.sh before exec/source/fork:$$"
    export A
    echo "1.sh: \$A is $A"
    case $1 in
            exec)
                    echo "using exec…"
                    exec ./2.sh ;;
            source)
                    echo "using source…"
                    . ./2.sh ;;
            *)
                    echo "using fork by default…"
                    ./2.sh ;;
    esac
    echo "PID for 1.sh after exec/source/fork:$$"
    echo "1.sh: \$A is $A"

2.sh 

    #!/bin/bash
    echo "PID for 2.sh: $$"
    echo "2.sh get \$A=$A from 1.sh"
    A=C
    export A
    echo "2.sh: \$A is $A"

     

     

    執行情況:

    $ ./1.sh    
    PID for 1.sh before exec/source/fork:5845364
    1.sh: $A is B
    using fork by default…
    PID for 2.sh: 5242940
    2.sh get $A=B from 1.sh
    2.sh: $A is C
    PID for 1.sh after exec/source/fork:5845364
    1.sh: $A is B
    $ ./1.sh exec
    PID for 1.sh before exec/source/fork:5562668
    1.sh: $A is B
    using exec…
    PID for 2.sh: 5562668
    2.sh get $A=B from 1.sh
    2.sh: $A is C
    $ ./1.sh source
    PID for 1.sh before exec/source/fork:5156894
    1.sh: $A is B
    using source…
    PID for 2.sh: 5156894
    2.sh get $A=B from 1.sh
    2.sh: $A is C
    PID for 1.sh after exec/source/fork:5156894
    1.sh: $A is C
    $

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.