您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關linux下如何執行shell命令,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
linux下執行shell命令有兩種方法
在當前shell中執行shell命令
在當前shell中產生一個subshell,在subshell中執行shell命令
1.在當前shell中執行shell命令
主要就是在命令行中通過交互方式方式直接輸入shell命令,命令行直接執行給出結果.比如這樣:
2.在當前shell中產生一個subshell,在subshell中執行shell命令
比如我們把shell寫成shell腳本的方式來運行,這個時候會先啟動一個subshell來代替當前的shell,然后執行shell腳本比如
#demo.sh #!/bin/bash read -p "please input your name:" name echo "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.sh
與 bash 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配置信息
關于“linux下如何執行shell命令”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。