Bash

‘cat’ 是內置的外殼程序還是外部程序?

  • February 9, 2018

當我使用該type命令來確定cat是 shell 內置程序還是外部程序時,我得到以下輸出:

-$ type cat
cat is hashed (/bin/cat)
-$

這是否意味著這cat是一個外部程序/bin/cat

我很困惑,因為當我檢查下面的輸出時,echo我發現它既是一個built-in程序,也是一個程序/bin/echo

-$ type echo
echo is a shell builtin
-$ which echo
/bin/echo
-$ 

所以我不能使用/bin/cat必然意味著外部程序的邏輯,因為 echo/bin/echo仍然是內置的。

那我怎麼知道cat是什麼?內置還是外置?

type告訴你 shell 會使用什麼。例如:

$ type echo
echo is a shell builtin
$ type /bin/echo
/bin/echo is /bin/echo

這意味著如果在 bash 提示符下鍵入echo,您將獲得內置的。如果您指定路徑,如 中/bin/echo,您將獲得外部命令。

which,相比之下,它是一個外部程序,它對 shell 將做什麼沒有特別的了解。在類似 debian 的系統上,which是一個在 PATH 中搜尋執行檔的 shell 腳本。因此,即使外殼程序使用內置的,它也會為您提供外部執行檔的名稱。

如果命令僅作為內置命令可用,which則不會返回任何內容:

$ type help
help is a shell builtin
$ which help
$ 

現在,讓我們看看cat

$ type cat
cat is hashed (/bin/cat)
$ which cat
/bin/cat

cat是一個外部執行檔,而不是一個內置的 shell。

引用自:https://unix.stackexchange.com/questions/208615