回答
如果你想看到內建的bash是如何被定義然後你只需要看看Section 4 of The Bash Man Page。
但是,如果您想知道bash布丁如何實現,您需要查看the Bash source code,因爲這些命令被編譯到bash可執行文件中。
查看命令是否爲bash內建的一種快速簡便的方法是使用help
命令。例如,help cd
將向您展示如何定義'cd'的bash內建。同樣爲help echo
。
佳麗, 檢查bash shell中的源代碼ftp://ftp.gnu.org/gnu/bash/bash-2.05b.tar.gz 你會發現貝殼的定義內置命令中沒有單獨的二進制可執行文件,但它的外殼二進制文件本身(名稱殼內置的內清楚地表明這一點)。
殼牌內裝 - http://linux.about.com/library/cmd/blcmdl1_builtin.htm 例如。 -
which cd
/usr/bin/which: no cd in (/usr/bin:/usr/local/bin......
不是shell內建的,而是二進制的。
which ls
/bin/ls
不完全正確 - 有時內置和可執行文件重疊,例如。雖然有'/ bin/echo'程序,但大多數shell都提供自己的'echo'內建。 – 2010-07-07 09:41:50
另一個例子是「時間」 – 2014-05-27 11:38:14
內置實際內置套件因外殼而異。主要有:
- Special built-in utilities,必須內置,因爲他們有一些特殊的屬性
- Regular built-in utilities,這幾乎都是內置的,由於性能或其他方面的考慮
- 任何標準工具如果shell實現者希望的話也可以內置。
您可以使用大多數shell支持的type
命令(儘管其輸出未標準化)瞭解該實用程序是否內置。從dash
一個例子:
$ type ls
ls is /bin/ls
$ type cd
cd is a shell builtin
$ type exit
exit is a special shell builtin
重新cd
工具,理論上沒有什麼防止外殼實施者來實現它的外部命令。 cd
不能直接更改shell的當前目錄,但是,例如,cd
可以通過套接字將新目錄與shell進程進行通信。但沒有人這樣做,因爲沒有意義。除了非常老的shell(沒有內置概念的地方),其中cd
使用了一些骯髒的系統破解工具來完成它的工作。
cd
在shell中如何實現?基本算法描述爲here。它也可以做一些工作來支持shell的額外功能。
每個Unix shell至少有一些內置命令。這些內置命令是shell的一部分,並作爲shell源代碼的一部分實現。 shell認識到它被要求執行的命令是其內置的命令之一,並且它自己執行該操作,而不會調用單獨的可執行文件。不同的shell有不同的內置,但是在基本設置中會有很多重疊。
有時,由於性能方面的原因,builtins內建。在這種情況下,在$PATH
中通常也有該命令的一個版本(可能具有不同的功能集,不同的可識別的命令行參數集等),但shell決定將該命令作爲內置函數來執行,以便它可以拯救一個短暫的過程產卵的工作,做一些它自己可以做的工作。這是對於bash和printf的情況下,例如:
$ type printf
printf is a shell builtin
$ which printf
/usr/bin/printf
$ printf
printf: usage: printf [-v var] format [arguments]
$ /usr/bin/printf
/usr/bin/printf: missing operand
Try `/usr/bin/printf --help' for more information.
注意,在上面的例子中,printf的是兩個內置的殼(實現爲bash的自身的一部分),以及一個外部命令(位於/ USR /斌/ printf的)。請注意,它們的行爲也不同 - 當不帶參數調用時,內置版本和命令版本會打印不同的錯誤消息。另請注意,-v var
選項(將此printf的結果存儲到名爲var
的shell變量中)只能作爲shell的一部分完成 - 子進程(如/ usr/bin/printf)無法訪問執行它們的shell的變量。
這讓我們進入故事的第二部分:一些命令是內置的,因爲它們需要。一些命令,如chmod
,是系統調用的簡潔包裝。當您運行/bin/chmod 777 foo
時,shell會fork,execs/bin/chmod(傳遞「777」和「foo」)作爲參數,新的chmod進程運行C代碼chmod("foo", 777);
,然後將控制權返回給shell。但這不適用於cd
命令。儘管cd
看起來與chmod
的情況相同,但它的行爲有所不同:如果shell產生了另一個進程來執行chdir
系統調用,它只會更改該新生成的進程的目錄,而不會更改該目錄。然後,當進程返回時,shell將被放置在與之前一樣的目錄中 - 因此需要將cd
作爲shell內置實現。
- 1. 什麼是$ shell命令
- 2. linux shell中的`set ovs_ctl $ {1-start}`命令是什麼意思?
- 3. 什麼是shell腳本命令從GitHub
- 4. Linux中的sed b命令是什麼?
- 5. Linux命令行/ shell術語
- 6. 爲什麼這個linux shell命令暫停系統?
- 7. 這個shell命令做了什麼?
- 8. 什麼不對這個shell命令
- 9. PHP這個shell命令做什麼?
- 10. 爲什麼設置命令是空白
- 11. 是什麼「:?」意思是在這個shell命令中?
- 12. 從python腳本執行linux shell命令
- 13. Linux shell命令拆分日誌文件
- 14. 在linux的bash shell查找命令
- 15. Windows中的Linux Bash Shell命令Powershell
- 16. 簡單的Linux Shell。停止命令
- 17. linux和unix命令有什麼區別?
- 18. unix shell設置命令
- 19. 什麼是shell_add_cmd,是爲linux添加命令?
- 20. 是g ++依賴於Linux運行類似linux的命令還是內置?
- 21. 什麼是unix/linux內部?
- 22. 的Linux命令shell命令行奇怪的行爲
- 23. Linux:從shell命令創建共享內存段
- 24. Linux Shell Scritping - 帶命令的變量內部變量
- 25. linux命令內存類型
- 26. pymongo中的collection.getIndexes()shell命令的等效參數是什麼?
- 27. bash shell命令行參數-e的含義是什麼?
- 28. 從shell刪除sqlite中的數據庫的命令是什麼?
- 29. shell中雙方括號命令的名稱是什麼?
- 30. 重定向shell命令的輸出& - 這是什麼意思
這與內核無關。 – 2010-07-07 23:05:12