主頁(yè) > 知識(shí)庫(kù) > linux下執(zhí)行shell命令方法簡(jiǎn)介

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

熱門標(biāo)簽:智能電銷機(jī)器人有用嗎 外呼電話系統(tǒng)怎么操作 德陽(yáng)400電話申請(qǐng) 百度地圖標(biāo)注直線距離 鶴崗400電話申請(qǐng) 商機(jī)地圖標(biāo)注 測(cè)繪地圖標(biāo)注名稱 怎么在百度地圖標(biāo)注公司的位置 天津電話外呼系統(tǒng)排名

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

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

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

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

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

比如我們把shell寫成shell腳本的方式來(lái)運(yùn)行,這個(gè)時(shí)候會(huì)先啟動(dòng)一個(gè)subshell來(lái)代替當(dāng)前的shell,然后執(zhí)行shell腳本比如

#demo.sh

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

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

首先我這邊是啟動(dòng)了兩個(gè)shell,這個(gè)時(shí)候左右兩個(gè)shell的pid號(hào)分別是2473和2505,并且這兩個(gè)進(jìn)程都是從一個(gè)叫做進(jìn)程ID號(hào)為2465的進(jìn)程中fork出來(lái)的子進(jìn)程。

當(dāng)執(zhí)行了 ./demo.sh 之后,會(huì)看到有三個(gè)bash的進(jìn)程,進(jìn)程ID分別是2473、2505、2633.其中2473和2505的分別對(duì)應(yīng)之前的兩個(gè)shell的進(jìn)程ID。多出了一個(gè)pid為2633的進(jìn)程。這個(gè)進(jìn)程其實(shí)就是我們說(shuō)的subshell??聪逻@個(gè)pid為2633的進(jìn)程的父進(jìn)程的進(jìn)程號(hào)是2473,就是說(shuō)是從pid為2473的shell進(jìn)程中啟動(dòng)一個(gè)subshell,subshell的進(jìn)程ID號(hào)為2633。當(dāng)我們輸入完warjiang,之后,腳本繼續(xù)執(zhí)行,執(zhí)行完畢之后,subshell進(jìn)程退出。

這個(gè)時(shí)候我們?cè)偃ゲ榭催M(jìn)程的時(shí)候,就會(huì)發(fā)現(xiàn)少了pid為2633的進(jìn)程,也就是少了前面那個(gè)subshell。

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

source與bash的區(qū)別

嚴(yán)格的來(lái)說(shuō),我這個(gè)標(biāo)題有毒,因?yàn)閟ource命令本來(lái)就是屬于bash中的一部分。我這里其實(shí)想說(shuō)的是 source demo.shbash demo.sh 的區(qū)別。

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

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

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

再回到上面那個(gè) source ~/.bashrc ,其實(shí)相當(dāng)于在當(dāng)前的終端中執(zhí)行 ~/.bashrc ,而.bashrc文件中的內(nèi)容就是中關(guān)于export PATH部分的語(yǔ)句,也就是設(shè)置PATH變量,執(zhí)行 source ~/.bashrc 讓配置的新的環(huán)境變量PATH在當(dāng)前終端中生效.

source與(.)

 

這邊的話,~/.bash_aliases一般用過(guò)alias的持久化,記錄用戶的alias記錄。直觀上來(lái)看,執(zhí)行 . ~/.bash_aliases 應(yīng)該是設(shè)置一些aliases中的變量別名。那么這個(gè) . 是什么.其實(shí)這里的 .source 的作用是一樣,表示在當(dāng)前的終端中執(zhí)行腳本,這樣就可以讓當(dāng)前的終端共享aliases中的alias配置信息

您可能感興趣的文章:
  • 一天一個(gè)shell命令 linux文本操作系列-tree命令詳解
  • Linux shell 之 提取文件名和目錄名的一些方法總結(jié)
  • Linux shell常用的73條命令總結(jié)
  • Linux下使用shell腳本自動(dòng)執(zhí)行腳本文件
  • linux寫shell需要注意的問(wèn)題(必看)
  • linux shell txt轉(zhuǎn)換成html的實(shí)現(xiàn)代碼
  • Linux Shell腳本的編程之正則表達(dá)式
  • linux shell 路徑截取正則表達(dá)式
  • Linux shell實(shí)現(xiàn)HTTP服務(wù)示例代碼
  • Linux shell tr 命令詳解

標(biāo)簽:六盤水 丹東 自貢 百色 滁州 武漢 鎮(zhèn)江 優(yōu)質(zhì)小號(hào)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《linux下執(zhí)行shell命令方法簡(jiǎn)介》,本文關(guān)鍵詞  linux,下,執(zhí)行,shell,命令,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《linux下執(zhí)行shell命令方法簡(jiǎn)介》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于linux下執(zhí)行shell命令方法簡(jiǎn)介的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章