天天看點

linux程式運作淺析

在linux上執行腳本程式有三種方法的不同

  例如有一個腳本檔案tests.sh,内容如下:  

  在linux上執行腳本程式有三種方法:

  1、将腳本加上可執行權限,直接執行對應的腳本檔案

    chmod +x tests.sh

    ./tests.sh

  2、使用shell程式直接解析

    sh tests.sh

  3、使用source指令直接執行腳本指令

    source tests.sh

  但是真正操作之後,就很容易發現,執行的結果,隻有第三種方法是完全執行了,而前兩種沒有切換目錄。

  主要是因為,這三種執行檔案的方式的思路是不同,差別如下:

  第一種方式:

  1、當指令行 shell 執行程式時,首先判斷是否該程式具有可執行權限。如果沒有可執行權限,就會提示:permission denied(權限不夠),是以,必須加入加上執行權限的環節;

  2、判斷具有可執行權限後,則調用 linux 核心指令建立一個程序,在建立的程序中調用指定的指令,test.sh 不是編譯型的檔案,是以 linux 核心并不能知道如何執行檔案;

  3、然後交給 shell,shell 就知道這是一個腳本,就會啟動一個新的 shell 程序來進行執行。但是 linux 系統有很多 shell,通過代碼的第一行#!/bin/bash确定使用bash;

  4、指令行就啟用一個新的 bash 程序來執行腳本程式;

  第二種方式:

  1、通過sh指令直接會啟動一個新的 shell 程序來進行執行。但是 linux 系統有很多 shell,通過代碼的第一行#!/bin/bash确定使用bash;

  2、指令行就啟用一個新的 bash 程序來執行腳本程式;

  兩種方式的共同點是:  

  1、父程序shell接收到指令,發現不是内建指令,建立了一個和自己一樣的 s h e l l 程序,來執行這個外部指令;

  2、此時 s h e l l 子程序用/bin/sh 取代自己,sh子 程序設定自己的運作環境變量,其中包括了$pwd 變量;

  3、sh 子程序依次執行内建指令cd 和echo指令,在這個過程中,sh子程序的環境變量$pwd被改變,子程序執行完畢,就消亡了; 

  4、父程序醒來擷取系統資源,恢複自己的環境變量$pwd,繼續接受使用者輸入;

  很自然的就會明白前兩種方法執行結果與預期不一樣的原因了,由于父程序的目前目錄(環境變量$pwd)沒有也無法被子程序改變,導緻沒有切換目錄的動作和結果。

  第三種方式:

  1、使用 source 執行 shell 腳本時不會建立子程序;

  2、直接在目前程序中直接執行shell腳本;

  3、直接對環境變量($pwd)予以更改,導緻目錄修改動作生效,切換到tmp目錄中。

  至此,三種執行腳本的方式解析結束,希望對閱讀者有所幫助。

人就像是被蒙着眼推磨的驢子,生活就像一條鞭子;當鞭子抽到你背上時,你就隻能一直往前走,雖然連你也不知道要走到什麼時候為止,便一直這麼堅持着。

繼續閱讀