国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

linux下執(zhí)行shell命令方法簡介

2024-08-28 00:04:06
字體:
供稿:網(wǎng)友

linux下執(zhí)行shell命令有兩種方法

 在當前shell中執(zhí)行shell命令 在當前shell中產(chǎn)生一個subshell,在subshell中執(zhí)行shell命令

 1.在當前shell中執(zhí)行shell命令

主要就是在命令行中通過交互方式方式直接輸入shell命令,命令行直接執(zhí)行給出結(jié)果.比如這樣:

2.在當前shell中產(chǎn)生一個subshell,在subshell中執(zhí)行shell命令

比如我們把shell寫成shell腳本的方式來運行,這個時候會先啟動一個subshell來代替當前的shell,然后執(zhí)行shell腳本比如

#demo.sh#!/bin/bashread -p "please input your name:" nameecho "hello $name"
添加執(zhí)行權(quán)限 chmod +x demo.sh 執(zhí)行如下 

這個腳本功能很簡單,就是輸出一行話,提示用戶輸入自己的名字,然后腳本輸出hello xxx。我主要想說下執(zhí)行結(jié)果及其分析。先來一張圖:

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

當執(zhí)行了 ./demo.sh 之后,會看到有三個bash的進程,進程ID分別是2473、2505、2633.其中2473和2505的分別對應(yīng)之前的兩個shell的進程ID。多出了一個pid為2633的進程。這個進程其實就是我們說的subshell。看下這個pid為2633的進程的父進程的進程號是2473,就是說是從pid為2473的shell進程中啟動一個subshell,subshell的進程ID號為2633。當我們輸入完warjiang,之后,腳本繼續(xù)執(zhí)行,執(zhí)行完畢之后,subshell進程退出。

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

講到這里,對于在當前終端中執(zhí)行shell與在當前終端中啟動subshell執(zhí)行shell兩種方式執(zhí)行shell也是有了一定程度的了解。下面將引出source命令與在終端中執(zhí)行shell腳本的區(qū)別。

source與bash的區(qū)別

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

相信大家但凡有l(wèi)inux下的開發(fā)、運維經(jīng)驗的codeframer都會配置過什么jdk等等之類的環(huán)境變量,大家一定都會記得自己都執(zhí)行過 source ~/.bash.rc ,那么這個source到底是什么.先把這個問題放一放,我們先往下看.還是上面的那個demo.sh的腳本.下面我們來比較一下 bash demo.sh(或者先執(zhí)行chmod +x demo.sh 再執(zhí)行./demo.sh)source demo.sh 的區(qū)別。

其中靠上面的一張圖片是執(zhí)行 ./demo.sh 的截圖,靠下面的一張是 source demo.sh 。比較兩張圖片,顯然,兩張圖片最大的區(qū)別在于,上面一張圖片多了一個subshell也就是pid為2633進程的出現(xiàn)再消失的過程。所以如果執(zhí)行執(zhí)行shell腳本,當前命令行會自動產(chǎn)生一個子進程,當執(zhí)行完腳本之后,會自動把這個子進程關(guān)閉。但是souce命令不會產(chǎn)生新的子進程,而是在當前終端進程中讀取并執(zhí)行shell腳本。

所以 source與bash的最大區(qū)別在于source不用啟動新的shell,而bash需要啟動新的shell

再回到上面那個 source ~/.bashrc ,其實相當于在當前的終端中執(zhí)行

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 岳阳市| 厦门市| 姜堰市| 昭通市| 伊宁县| 肇东市| 宁德市| 绵阳市| 麟游县| 柘城县| 宁蒗| 长宁县| 壶关县| 峡江县| 勃利县| 辉南县| 罗江县| 克拉玛依市| 六枝特区| 长垣县| 丰顺县| 阳西县| 万山特区| 洛隆县| 仪陇县| 石狮市| 新巴尔虎左旗| 双牌县| 彭泽县| 类乌齐县| 同仁县| 蓝山县| 甘孜| 揭东县| 嘉定区| 张家港市| 明水县| 黔西| 吴川市| 确山县| 西乌珠穆沁旗|