想知道某個命令是不是由bash內置的命令的話,咱們可使用type。linux
有不少的shell內置的命令,若是咱們想關閉某個命令的話,那麼就可使用 enable :用來開啓或者關閉某個內置命令的功能shell
用set命令能夠設置各類shell選項或者列出shell變量.單個選項設置經常使用的特性.在某些選項以後-o參數將特殊特性打開.在某些選項以後使用+o參數將關閉某些特性,不帶任何參數的set命令將顯示shell的所有變量.除非遇到非法的選項,不然set老是返回ture。bash
set -e表示一旦腳本中有命令的返回值爲非0,則腳本當即退出,後續命令再也不執行;eclipse
set -o pipefail表示在管道鏈接的命令序列中,只要有任何一個命令返回非0值,則整個管道返回非0值,即便最後一個命令返回0.tcp
關閉通配符功能: set -o noglob,以下的效果ide
bash shell的命令分爲兩類:外部命令和內部命令。外部命令是經過系統調用或獨立的程序實現的,如sed、awk等等。內部命令是由特殊的文件格式(.def)所實現,如cd、history、exec等等。ui
exec和source都屬於bash內部命令(builtins commands)。spa
source和exec均和 fork、shell腳本執行 的概念有關:3d
fork是linux的系統調用,用來建立子進程(child process)。子進程是父進程(parent process)的一個副本,從父進程那裏得到必定的資源分配以及繼承父進程的環境。子進程與父進程惟一不一樣的地方在於pid(process id)。環境變量(傳給子進程的變量,遺傳性是本地變量和環境變量的根本區別)只能單向從父進程傳給子進程。無論子進程的環境變量如何變化,都不會影響父進程的環境變量。code
shell腳本執行 有2 種:
(1)新產生一個shell,而後執行相應的shell scripts;一種是在當前shell下執行,再也不啓用其餘shell。新產生一個shell而後再執行scripts的方法是在scripts文件開頭加入如下語句
#!/bin/sh
通常的script文件(.sh)便是這種用法。
(2)再也不產生新的shell,而在當前shell下執行一切命令。有: source、 exec。
source命令即點(.)命令。在bash下輸入man source,找到source命令解釋處,能夠看到解釋」Read and execute commands from filename in the current shell environment and
從中能夠知道,source命令是在當前進程中執行參數文件中的各個命令,而不是另起子進程(或sub-shell)。
man exec,找到exec命令解釋處,能夠看到有」No new process is created.」這樣的解釋,這就是說exec命令不產生新的子進程。
exec與source的區別:exec命令在執行時會把當前的shell process關閉,而後換到後面的命令繼續執行。系統調用exec是以新的進程去代替原來的進程,但進程的PID保持不變。所以,能夠這
樣認爲,exec系統調用並無建立新的進程,只是替換了原來進程上下文的內容。原進程的代碼段,數據段,堆棧段被新的進程所代替。exec的進程運行完畢以後不回到
原先的程序中去。雖然exec和source都是在父進程中直接執行,但exec這個與source有很大的區別,source是執行shell腳本,並且執行後會返回之前的shell。而exec
的執行不會返回之前的shell了,而是直接把之前登錄shell做爲一個程序看待,在其上進行復制。
例如 ,調用 exec ls命令,回退出當前的shell終端。
[root@s2 ~]# exec ls 1.pcap anaconda-ks.cfg Documents dpi_log err.txt ftp.pcap Music pcap Pictures t1 tcpreplay-3.4.4 telnet_only.pcap Templates wcp_55_pcap_1452502359.pcap a Desktop Downloads eclipse ftp_big.pcap initial-setup-ks.cfg nohup.out perl5 Public t60 tcpreplay-3.4.4.tar.gz telnet.pcap Videos workspace Connection closed by foreign host. Disconnected from remote host(172.168.1.145) at 17:16:09. Type `help' to learn how to use Xshell prompt.