exec和source都屬於bash內部命令(builtins commands),在bash下輸入man exec或man source能夠查看全部的內部命令信息。 linux
bash shell的命令分爲兩類:外部命令和內部命令【type -a command 查看】。外部命令是經過系統調用或獨立的程序實現的,如sed、awk等等。內部命令是由特殊的文件格式(.def)所實現,如cd、history、exec等等。 shell
shell變量大體分爲三種類型: bash
1》內部變量:系統提供,不用定義,不能修改 函數
變量 | 含義 |
---|---|
$0 | 當前腳本的文件名 |
$n | 傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。 |
$# | 傳遞給腳本或函數的參數個數。 |
$* | 傳遞給腳本或函數的全部參數。 |
$@ | 傳遞給腳本或函數的全部參數。被雙引號(" ")包含時,與 $* 稍有不一樣,下面將會講到。 |
$? | 上個命令的退出狀態,或函數的返回值。 |
$$ | 當前Shell進程ID。對於 Shell 腳本,就是這些腳本所在的進程ID。 |
2》環境變量:系統提供,不用定義,能夠修改,好比當前進程及其子進程使用的 PATH、PWD、SHELL 等 ui
3》用戶變量:用戶定義,能夠修改 spa
【fork】 線程
fork是linux的系統調用,父進程建立一個子進程(child process)。子進程從父進程那裏得到必定資源並繼承父進程的環境!環境變量傳給子進程的變量,只能單向從父進程傳給子進程。無論子進程的環境變量如何變化,都不會影響父進程的環境變量。 orm
【source】命令即點(.)命令。 繼承
在 bash下輸入man source,找到source命令解釋處,能夠看到解釋"Read and execute commands from filename in the current shell environment and ..."。從中能夠知道,source命令是在當前進程中執行參數文件中的各個命令,而不是另起子進程(或sub-shell)。 進程
source命令是在當前進程中執行參數文件中的各個命令,而不是另起子進程(或sub-shell)。
【exec】
在bash下輸入man exec,找到exec命令解釋處,能夠看到有"No new process is created."這樣的解釋,這就是說exec命令不產生新的子進程。那麼exec與source的區別是什麼呢?
exec命令在執行時會把當前的shell process關閉,而後換到後面的命令繼續執行。
選項 [options] | 含義 | 例子 |
---|---|---|
-H | 設置硬資源限制,一旦設置不能增長。 | ulimit – Hs 64;限制硬資源,線程棧大小爲 64K。 |
-S | 設置軟資源限制,設置後能夠增長,可是不能超過硬資源設置。 | ulimit – Sn 32;限制軟資源,32 個文件描述符。 |
-a | 顯示當前全部的 limit 信息。 | ulimit – a;顯示當前全部的 limit 信息。 |
-c | 最大的 core 文件的大小, 以 blocks 爲單位。 | ulimit – c unlimited; 對生成的 core 文件的大小不進行限制。 |
-d | 進程最大的數據段的大小,以 Kbytes 爲單位。 | ulimit -d unlimited;對進程的數據段大小不進行限制。 |
-f | 進程能夠建立文件的最大值,以 blocks 爲單位。 | ulimit – f 2048;限制進程能夠建立的最大文件大小爲 2048 blocks。 |
-l | 最大可加鎖內存大小,以 Kbytes 爲單位。 | ulimit – l 32;限制最大可加鎖內存大小爲 32 Kbytes。 |
-m | 最大內存大小,以 Kbytes 爲單位。 | ulimit – m unlimited;對最大內存不進行限制。 |
-n | 能夠打開最大文件描述符的數量。 | ulimit – n 128;限制最大能夠使用 128 個文件描述符。 |
-p | 管道緩衝區的大小,以 Kbytes 爲單位。 | ulimit – p 512;限制管道緩衝區的大小爲 512 Kbytes。 |
-s | 線程棧大小,以 Kbytes 爲單位。 | ulimit – s 512;限制線程棧的大小爲 512 Kbytes。 |
-t | 最大的 CPU 佔用時間,以秒爲單位。 | ulimit – t unlimited;對最大的 CPU 佔用時間不進行限制。 |
-u | 用戶最大可用的進程數。 | ulimit – u 64;限制用戶最多能夠使用 64 個進程。 |
-v | 進程最大可用的虛擬內存,以 Kbytes 爲單位。 | ulimit – v 200000;限制最大可用的虛擬內存爲 200000 Kbytes。 |