2013-09-27 55 views
7

有很多shell命令,就像Shell命令是用什麼語言編寫的?

LS,CD,貓等

書面這些命令使用什麼編程語言?他們是如何編制的?

我的理解::

Shell is a program which takes command; ** does this mean that it interprets those commands(like ls is interpreted by shell program)?** 

還有一個問題,是殼牌計劃寫什麼語言?

謝謝!

+0

我是一個初學者,感到困惑了很多。這可能以更好的方式解釋我。 – CODError

+0

我不確定,但我認爲它們是用匯編語言編寫的。查看[這裏](http://en.wikipedia.org/wiki/Assembly_language)瞭解更多關於裝配的信息。 –

回答

4

絕大部分在Linux中的基本工具都寫在C。這ü可以在busybox source code驗證支持其中大部分都寫在C基本的Linux命令實用的。 SO命令如ls,CD ...等都是c

如何Shell會在操作系統中檢查以下鏈接

有一個特殊的程序稱爲殼。 shell接受人類可讀的命令並將它們轉換爲內核可以讀取和處理的內容。

http://www.math.iitb.ac.in/resources/manuals/Unix_Unleashed/Vol_1/ch08.htm

+0

謝謝!這篇文章看起來非常好,很容易理解內核和shell的工作。 – CODError

+0

如果你想了解命令是如何工作的,你可以在忙碌的源代碼中檢查 –

+0

我會發現{busy box source code}。但是,如果可能的話,能否請你解釋一下。 – CODError

5

這些程序主要用C編程語言是Linux內核。

+2

這裏是源代碼:http://lingrok.org/xref/coreutils/src/ – Jojo

+0

按我understading,命令可能在shell編程語言wrtten,像猛砸。 Shell程序(如Bash)使用C語言(不確定它是否可以使用匯編語言)。 – CODError

1

的計劃是寫在任何語言(主要是C)普通的可執行文件。

外殼採用命令進入這僅僅是一個字符串。然後查找諸如環境變量它們$後跟一個字或重定向其>後跟路徑具有特殊意義的殼某些字符序列。在進行這個替換之後,它會有一個字符串,它被分割爲空格以生成可執行文件和參數的名稱。然後,shell將搜索環境變量PATH中目錄列表中的可執行文件。然後shell使用系統調用從可執行文件和參數中創建一個進程。

例如要執行的命令ls $HOME殼首先認識到$HOME是一個環境變量和在離開該命令ls /home/user這種情況下/home/user用它替換它的值。然後它將命令分割到空間上以獲得可執行文件名ls和參數/home/user。 shell找到匹配ls的第一個可執行文件,通常爲/bin/ls。然後使用ether spawn()/ posix_spawn()或fork()和exec()系統調用來創建新進程。

+0

請詳細解釋!通過給出一個命令的例子。 解釋下面的東西: - 取代enviremental變量(即用戶名等) - 生成可執行文件和參數 - 使用系統調用來創建進程 – CODError