1. 程式人生 > >什麼是Bash Shell的內建(build in)命令

什麼是Bash Shell的內建(build in)命令

1.什麼是build in命令:

shell內建命令是指bash(或其它版本)工具中整合的命令。一般都會有一個與之同名的系統命令,比如bash中的echo命令與/bin/echo是兩個不同的命令,儘管他們行為大體相仿。當在bash中鍵入一個命令時系統會先看他是否是一個內建命令,如果不是才會檢視是否是系統命令或第三方工具。所以在bash中鍵入echo命令實際上執行bash工具集中的bash命令也就是內建命令,而不是/bin/echo這個系統命令。
 

2.內建命令與系統命令
 
內建命令要比系統論命令有比較高的執行效率。外部命令執行時往往需要fork出(產生出)一個子程序,而內建命令一般不用。下面(或許以後還會有)這一篇文章將介簡bash的內建命令。

3.檢視一個命令是系統命令還是內建命令:type
 
[email protected]:~/Documents
 $ type -a pwd
 pwd is a shell builtin
 pwd is /bin/pwd
 
[email protected]:~/Documents
 $ type -a echo
 echo is a shell builtin
 echo is /bin/echo
 

可以看出,有些命令,echo和pwd同時是內建命令和系統命令。

4.常見命令的型別 


[[email protected] ~]# type -a cd 

cd is a shell builtin
 [

[email protected] ~]# type -a pwd 
 pwd is a shell builtin
 pwd is /bin/pwd
 [[email protected] ~]# type -a time 
 time is a shell keyword
 time is /usr/bin/time
 [[email protected] ~]# type -a date 
 date is /bin/date
 [[email protected] ~]# type -a which 
 which is aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
 which is /usr/bin/which
 [
[email protected]
~]# type -a whereis 
 whereis is /usr/bin/whereis
 [[email protected] ~]# type -a whatis 
 whatis is /usr/bin/whatis
 [[email protected] ~]# type -a function 
 function is a shell keyword
 [[email protected] ~]# type -a ls 
 ls is aliased to `ls --color=tty'
 ls is /bin/ls
 [[email protected] ~]# type -a ll 
 ll is aliased to `ls -l --color=tty'
 [[email protected] ~]# type -a echo 
 echo is a shell builtin
 echo is /bin/echo
 [[email protected] ~]# type -a bulitin 
 -bash: type: bulitin: not found
 [[email protected] ~]# type -a builtin 
 builtin is a shell builtin
 [[email protected] ~]# type -a keyword 
 -bash: type: keyword: not found
 [[email protected] ~]# type -a command 
 command is a shell builtin
 [[email protected] ~]# type -a alias 
 alias is a shell builtin
 [[email protected] ~]# type -a grep 
 grep is /bin/grep
 [[email protected] ~]#

Shell識別三種基本命令:內建命令、Shell函式以及外部命令:
(1)內建命令就是由Shell本身所執行的命令。
   有些命令是由於其必要性才內建的,例如cd用來改變目錄,read會將來自使用者(和檔案)的輸入資料傳給Shell外亮。
   另一種內建命令的存在則是為了效率,其中最典型的就是test命令,編寫指令碼時經常會用到它。另外還有I/O命令,例如echo於printf.
(2)Shell函式是功能健全的一系列程式程式碼,以Shell語言寫成,它們可以像命令那樣引用。
(3)外部命令就是由Shell副本(新的程序)所執行的命令,基本的過程如下:
   a. 建立一個新的程序。此程序即為Shell的一個副本。
   b. 在新的程序裡,在PATH變數內所列出的目錄中,尋找特定的命令。
      /bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin為PATH變數典型的預設值。
      當命令名稱包含有斜槓(/)符號時,將略過路徑查詢步驟。
   c. 在新的程序裡,以所找到的新程式取代執行中的Shell程式並執行。
   d. 程式完成後,最初的Shell會接著從終端讀取下一條命令,和執行腳本里的下一條命令。

使用type可以檢視是否是內建命令:
  type (不帶引數)會顯示命令是內建命令還是外部命令
       -t :file 外部命令;alias 命令別名;builtin 內建命令
       -a :會將命令PATH路徑顯示出來
如何執行互動式命令:
使用者在命令列輸入命令後,一般情況下Shell會fork並exec該命令,但是Shell的內建命令例外,執行內建命令相當於呼叫Shell程序中的一個函式,並不建立新的程序.
比如:cd、alias、umask、exit等命令即是內建命令,凡是用which命令查不到程式檔案所在位置的命令都是內建命令,內建命令沒有單獨的man手冊,要在man手冊中檢視內建命令,應該man bash-builtins,進而查詢內建命令用法;內建命令雖然不建立新的程序,但也會有Exit Status,通常也用0表示成功非零表示失敗,雖然內建命令不建立新的程序,但執行結束後也會有一個狀態碼,也可以用特殊變數$?讀出


相關推薦

什麼是Bash Shell(build in)命令

1.什麼是build in命令: shell內建命令是指bash(或其它版本)工具中整合的命令。一般都會有一個與之同名的系統命令,比如bash中的echo命令與/bin/echo是兩個不同的命令,儘管他們行為大體相仿。當在bash中鍵入一個命令時系統會先看他是否是一個內

Shell命令與運行方法

col shell 執行 log family i++ 整數 執行文件 讀取 1. !# /bin/bash 這句話是shell腳本的第一行,/bin/bash表示腳本的解釋器位置。 2. 腳本的運行:     (1)bash

Linux Shell 命令 : builtin 命令詳解

builtin命令用於執行指定的shell內部命令,並返回內部命令的返回值。builtin命令在使用時,將不能夠再使用Linux中的外部命令。當系統中定義了與shell內部命令相同的函式時,使用builtin顯式地執行shell內部命令,從而忽略定義的shell函式。 語法

系統技術非業餘研究 » shell命令rp()

我們經常需要在erlang shell下顯示變數的值. 為了節省版面, 變數的輸出是會被截斷的 以 …]來作為提示. 有時候這樣很不方便, 不能看到全部的值, 比如processes(). 這時候shell內建命令rp用於看格式化的資料來救助了, 比如我們可以這rp(processes()).

shell在其原始碼中的命令

shell有很多內建在其原始碼中的命令。這些命令是內建的,所以shell不必到磁碟上搜索它們,執行速度因此加快。bash提供的help功能,能提供任何內建命令的線上幫助,表14-12列出了這些內建命令。 表14-12 內建命令 命    令 功    能 .

shell命令

內建變數即預定義變數。在 shell 中,預先定義了幾個有特殊含義的 shell 變數,它們的值只能由 shell 根據實際情況進行賦值,而不能通過使用者重新設定。所有預定義變數都由 $ 符和另一個符號組成,常用的 shell 預定義變數如下: $#: 位置引數的數量。 $*: 所有位置引數的內容。 $

CentOS7的bash shell及顯示路徑、命令補全方法

相信很多使用linux的朋友在接觸solaris時,都會感覺不習慣。因為linux預設使用的是bash shell,而solaris用的是 sh shell。好久沒接觸系統了,昨天安裝了solaris,安裝完系統後發現完全不是那麼回事,使用起來很不方便,所以決定修改預設sh

常用的shell變數

$$  -- Shell本身的PID $!  -- Shell最後執行的後臺Process的PID $?  -- 最後執行的命令的結束程式碼(返回值) $-  -- 使用Set命令設定的Flag一覽 $*  -- 所有引數列表。如"$*"用「"」括起來的情況、以"$1 $2

iOS應用付費 In-App Purchase 詳細介紹(IAP詳解)

In App Purchase(程式內購買)為蘋果開發人員們打開了一個新的盈利渠道,如果您對此並不瞭解,下面這段 CocoaChina 會員“leon”翻譯的 In App Purchase 詳細介紹一定不能錯過。 一、In App Purchase概覽 Store

linux shell變數和常見比較

特殊的shell變數 變數 含義 $0 指令碼名 $1 -$9 位置引數1-9 ${10} 位置引數10 $# 位置引數的個數 "$*" 所有位置引數(作為單個字串) "[email pr

Bash Shell-使用的set和shopt命令設定bash選項

set命令可以用來定製shell環境,使用選項“o”來開啟或者關閉選項。 例如開啟選項:set -o 選項,關閉選專案:set +o 選項。 例如要開啟vi互動式命令列編輯,則如下: 1.檢視當前設定情況 [[email protected] ~]# set -o alle

Linux/Unix Bash Shell 所有命令

對於bash shell本身包含的內建命令,我們如何在Linux / Apple OS X / *BSD / 類Unix作業系統上全部列出他們,並且無需查閱大量得bash手冊? shell 內建命令就是一個命令或一個函式,從 shell 中呼叫,它直接在 shell 中執行。bash shell

CentOS 7 Shell指令碼程式設計第六講 Bash Shell 外部命令命令

開發十年,就只剩下這套架構體系了! >>>   

CentOS 7 Shell指令碼程式設計第七講 Bash Shell 常用命令簡介

開發十年,就只剩下這套架構體系了! >>>   

Linux(小專案)————shell的實現,包含重定向、命令

bash原理: 通過上面bash的原理我們可以,瞭解到shell的框架與流程: 1.等待使用者輸入命令。 2.解析使用者輸入的字串。 3.建立子程序執行exec程式替換 4.父程序等待子程序退出。 迴圈執行1~4步驟,即可完成my_shell。 最簡單版本的my_shell實現:

Hive基本操作,DDL操作(建立表,修改表,顯示命令),DML操作(Load Insert Select),Hive Join,Hive Shell引數(運算子、函式)等

1.  Hive基本操作 1.1  DDL操作1.1.1    建立表 建表語法 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name    

Linux程式設計 10 (shell外部命令命令,alias ,type命令)

一.  內部命令   Linux命令有內部命令(內建命令)和外部命令之分,內部命令和外部命令功能基本相同,但也有些細微差別。內部命令不需要使用子程序來執行,它們已經和shell編譯成一體,作為shell工具的組成部分存在。不需要藉助外部程式檔案來執行。它們是一些比較簡單的linux系統命令,如exit,his

bash命令mapfile:讀取檔案內容到陣列

bash提供了兩個內建命令:readarray和mapfile,它們是同義詞。它們的作用是從標準輸入讀取一行行的資料,然後每一行都賦值給一個數組的各元素。顯然,在shell程式設計中更常用的是從檔案、從管道讀取,不過也可以從檔案描述符中讀取資料。 需要先說明的是,shell並不像其它專門的程式語言對陣列、列表

Bash命令-shopt

1.shopt 命令簡介 2.shopt 引數含義說明 3.shopt 使用示例 1)extglob 引數 shopt 命令用於顯示和設定shell中的行為選項,通過這些選項以增強shell易用性。 shopt命令若不帶任何引數選項,則可以顯示所有可以設定的shell操作選項。

Linux help --顯示Bash命令的幫助資訊

用途說明 help命令顧名思義就是顯示幫助資訊的,它是個Bash內建命令,也只是用來顯示Bash內建命令的幫助資訊的(Display helpful  information about builtin commands)。如果要顯示外部命令的幫助資訊,可以使用man命令或者info命令。在使用Linux或