1. 程式人生 > >Linux基礎之-Bash命令優先級

Linux基礎之-Bash命令優先級

unix 優先 易用 pat erro 後來 arc hive $path

一. Bash簡介

命令解釋器,也就是 Bourne Again Shell,起源於shell。shell俗稱殼,它是指UNIX系統下的一個命令解析器;主要用於用戶和系統的交互。UNIX系統上有很多種Shell。首個shell,即Bourne Shell,於1978年在V7(AT&T的第7版)UNIX上推出。後來,又演變出C shell、bash等不同版本的shell。

Bash由於易用和免費,在日常工作中被廣泛使用。同時,Bash也是大多數Linux系統默認的Shell。在一般情況下,人們並不區分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh

,它同樣也可以改為#!/bin/bash。#!告訴系統其後路徑所指定的程序即是解釋此腳本文件的Shell程序。

二. 命令的優先級

1. 獲取一個命令執行的優先級別,至上往下

  alias

    compound commands

      function

        build_in

          hash

            $PATH

              error:command not found

2. 命令的分類

  alias(別名):是為了簡化輸出給一個長參數命令的整合,別名的定義方法 alias la=‘ls -al‘ 取消別名 unalias la;

  built_in(內部命令):bash自帶的命令 功能簡單,內部命令的幫助在builtin(1)裏;

  外部命令:就是一個小程序存在於/bin/ /sbin/ /usr/bin 等地方。

3. 命令的優先級驗證

 a 驗證別名優先於內部命令和外部命令

 技術分享圖片

  結論,命令的執行搜索順序:別名 (alias可以查看)——bash內部命令——$PATH 中按冒號分割的每個路徑中去搜索
  b 驗證別名優先於復合命令(compound command)

技術分享圖片

  c 驗證復合命令優先於函數(function)

技術分享圖片

  d 驗證函數優先於內置命令

技術分享圖片

  結論,命令的執行搜索順序:別名 (alias可以查看)——復合命令——函數——

bash內部命令——$PATH 中按冒號分割的每個路徑中去搜索

  e 驗證hash優先於$PATH

技術分享圖片

  最終驗證結論為:命令的執行搜索順序:別名 (alias可以查看)——復合命令——函數——內置命令——bash內部命令——$PATH 中按冒號分割的每個路徑中去搜索

參考資料

1. http://www.cnblogs.com/linhaifeng/p/6592572.html#_labelTop

2. http://www.cnblogs.com/skywang12345/archive/2013/05/30/3106570.html#a12

Linux基礎之-Bash命令優先級