linux下執行shell命令方法簡介_linux shell

來源:互聯網
上載者:User

linux下執行shell命令有兩種方法

  1.  在當前shell中執行shell命令
  2. 在當前shell中產生一個subshell,在subshell中執行shell命令

 1.在當前shell中執行shell命令

主要就是在命令列中通過互動方式方式直接輸入shell命令,命令列直接執行給出結果.比如這樣:

2.在當前shell中產生一個subshell,在subshell中執行shell命令

比如我們把shell寫成shell指令碼的方式來運行,這個時候會先啟動一個subshell來代替當前的shell,然後執行shell指令碼比如

#demo.sh#!/bin/bashread -p "please input your name:" nameecho "hello $name"
添加執行許可權 chmod +x demo.sh 執行如下 

這個指令碼功能很簡單,就是輸出一行話,提示使用者輸入自己的名字,然後指令碼輸出hello xxx。我主要想說下執行結果及其分析。先來一張圖:

首先我這邊是啟動了兩個shell,這個時候左右兩個shell的pid號分別是2473和2505,並且這兩個進程都是從一個叫做進程ID號為2465的進程中fork出來的子進程。

當執行了 ./demo.sh 之後,會看到有三個bash的進程,進程ID分別是2473、2505、2633.其中2473和2505的分別對應之前的兩個shell的進程ID。多出了一個pid為2633的進程。這個進程其實就是我們說的subshell。看下這個pid為2633的進程的父進程的進程號是2473,就是說是從pid為2473的shell進程中啟動一個subshell,subshell的進程ID號為2633。當我們輸入完warjiang,之後,指令碼繼續執行,執行完畢之後,subshell進程退出。

這個時候我們再去查看進程的時候,就會發現少了pid為2633的進程,也就是少了前面那個subshell。

講到這裡,對於在當前終端中執行shell與在當前終端中啟動subshell執行shell兩種方式執行shell也是有了一定程度的瞭解。下面將引出source命令與在終端中執行shell指令碼的區別。

source與bash的區別

嚴格的來說,我這個標題有毒,因為source命令本來就是屬於bash中的一部分。我這裡其實想說的是 source demo.shbash demo.sh 的區別。

相信大家但凡有linux下的開發、營運經驗的codeframer都會配置過什麼jdk等等之類的環境變數,大家一定都會記得自己都執行過 source ~/.bash.rc ,那麼這個source到底是什麼.先把這個問題放一放,我們先往下看.還是上面的那個demo.sh的指令碼.下面我們來比較一下 bash demo.sh(或者先執行chmod +x demo.sh 再執行./demo.sh)source demo.sh 的區別。

其中靠上面的一張圖片是執行 ./demo.sh 的截圖,靠下面的一張是 source demo.sh 。比較兩張圖片,顯然,兩張圖片最大的區別在於,上面一張圖片多了一個subshell也就是pid為2633進程的出現再消失的過程。所以如果執行執行shell指令碼,當前命令列會自動產生一個子進程,當執行完指令碼之後,會自動把這個子進程關閉。但是souce命令不會產生新的子進程,而是在當前終端進程中讀取並執行shell指令碼。

所以 source與bash的最大區別在於source不用啟動新的shell,而bash需要啟動新的shell

再回到上面那個 source ~/.bashrc ,其實相當於在當前的終端中執行 ~/.bashrc ,而.bashrc檔案中的內容就是中關於export PATH部分的語句,也就是設定PATH變數,執行 source ~/.bashrc 讓配置的新的環境變數PATH在當前終端中生效.

source與(.)

 

這邊的話,~/.bash_aliases一般用過alias的持久化,記錄使用者的alias記錄。直觀上來看,執行 . ~/.bash_aliases 應該是設定一些aliases中的變數別名。那麼這個 . 是什麼.其實這裡的 .source 的作用是一樣,表示在當前的終端中執行指令碼,這樣就可以讓當前的終端共用aliases中的alias配置資訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.