在這個遊戲中,有很多玩家不瞭解怎麼設定中文,那麼今天小編就在這裡給大家分享一點我的小經驗,希望可以給你們帶來幫助。 1首先,把正確的遊戲檔案放在 roms 資料夾裡,注意一定要
2020-11-30 08:29:52
搞懂linux程式如何執行是一件重要的事情,這是為我們進一步發展打下了堅實基礎的一步。本文將通過範例來詳細地講解如何執行linux程式。希望對於大家理解有幫助。部分內容參考於《linux就該這麼學》,希望對大家有幫助。
電腦
linux作業系統
首先,我們從一個十分簡單的例子test.sh開始吧:
#!/bin/sh
#this is a test.
cd /tmp
echo "hello,this is a test"
這是一個十分簡單的程式,但是執行結果可能會讓你吃驚哦!
這個時候,我們發現程式執行之後,並沒有改變當前目錄。(黑人問號???)
彆著急,我們先了解一下linux程式如何執行。
linux程式三種執行方法
執行linux程式有三種方法,分別是:
1、使檔案具有可執行許可權,直接執行檔案。
chmod 命令用來修改檔案的許可權。+x是使檔案擁有可執行的許可權。就如上面我們執行程式一樣。但是我們看到的結果與我們想象當中有一定的出入。
2、直接呼叫命令直譯器執行程式。
如下圖所示:
由於我們的直譯器是/bin/sh,所以,用sh命令直譯器來執行程式。
我們也看到當前的工作路徑沒有發生變化。(黑人問號???)
3、使用source執行檔案。
沒錯,這裡我們發現當前的工作路徑發生了變化,(黑人問號???)但是究竟為什麼呢?讓我們帶著三個黑人問號詳細瞭解一下linux程式究竟怎麼執行。
當命令列shell執行程式時,首先判斷是否該程式具有可執行許可權。如果沒有可執行許可權,就會提示:Permission denied(許可權不夠)
在第一種方法中,我們直接執行檔案,就先加上了可執行許可權。
當命令列接收到我們的執行命令,並且判斷具有可執行許可權後,則呼叫Linux核心命令新建一個程序,在新建的程序中呼叫指定的命令。但是我們的test.sh不是編譯型的檔案,所以linux核心不知道如何執行,然後交給shell,shell就知道這是一個指令碼,那麼就啟動一個新的shell程序來進行執行。但是linux系統有很多shell,如圖:
我們程式第一行看到是#!/bin/sh,這時,命令列就啟用一個新的bash程序來執行程式。
在我們執行shell程式的三種方法中,前兩種方法的執行過程如下:
(1)父程序接收到命令,然後發現不是內建命令,於是建立了一個和自己一樣的s h e l l程序,來執行這個外部命令
(2)這個s h e l l子程序用/bin/sh取代自己,sh程序設定自己的執行環境變數,其中包括了$PWD變數。
(3)sh程序依次執行內建命令cd和echo。在此過程中,sh程序(子程序)的環境變數被cd命令改變。
(4)子程序執行完畢,就消亡了,一直在等待的父程序醒來,繼續接受命令。
所以我們明白了前兩種方法執行結果跟我們預期不一樣的原因,父程序的當前目錄(環境變數)無法被子程序改變。
但是,使用source執行是shell指令碼時不會建立子程序,而是在父程序中直接執行。至此黑人問號消失,繼續加油寫程式碼吧。
注意命令的理解
注意路徑的變化
相關文章
在這個遊戲中,有很多玩家不瞭解怎麼設定中文,那麼今天小編就在這裡給大家分享一點我的小經驗,希望可以給你們帶來幫助。 1首先,把正確的遊戲檔案放在 roms 資料夾裡,注意一定要
2020-11-30 08:29:52
在玩星海爭霸2的mod中發現蟲族英雄凱瑞甘簡直太厲害了,我給大家介紹了怎麼創建這個厲害的單位1創建遊戲載入mod,以及怎麼用人族創建蟲族的基礎單位可以參考之前寫的經驗內容,我
2020-11-30 08:08:21
下面就是小編帶給大家的星海爭霸人神蟲3族主要空軍全對照的方法操作,希望能夠給你們帶來一定的幫助,謝謝大家的觀看。1神族這個空軍組合強大無比,ZERG沒有什麼好辦法,只能依靠數
2020-11-30 08:07:08
對於人類來說,雷神也是地面上最厚的肉盾,其攻擊力上也相當優異,對空有擴散攻擊,對地則有一擊60點的傷害,「250毫米突擊炮」更是可以一次造成500點的傷害,要拆掉敵方的堵門建築可以
2020-11-30 08:06:27
《星海爭霸2》攻略1不法之徒目標全部達成 完成戰役並且拯救左下角的起義軍,基本都會幹吧?無難度相關成就:現金獎勵:普通難度下拾取地圖上所有的資源簇,這個基本也無難度,但是和下
2020-11-30 07:50:01
親們還在為UA3的25W 經驗 煩惱嗎今天我給大家一個方法擺脫這個煩惱改完後請給好評哦順便點下訂閱 nice人生何苦【原創】,【禁止轉載】2017年1月23日更新:1.應對新版 驗證碼機
2020-11-30 07:49:45