有很多shell命令,比如
ls、cd、cat 等
编写这些命令时使用什么编程语言?它们是如何编译的?
我的理解:
Shell is a program which takes command; ** does this mean that it interprets those commands(like ls is interpreted by shell program)?**
还有一个问题,Shell 程序是用什么语言编写的?
linux 中的大多数基本实用程序都是用 . 编写的C
。您可以验证busybox source code
哪些支持大多数用 . 编写的基本 linux 命令实用程序C
。所以像 ls,cd ...etc 这样的命令在c
shell 将如何解释以下链接中的签入
在操作系统中有一个特殊的程序叫做 shell。shell 接受人类可读的命令并将它们翻译成内核可以读取和处理的东西。
http://www.math.iitb.ac.in/resources/manuals/Unix_Unleashed/Vol_1/ch08.htm
这些程序和 linux 内核一样主要是用 C 编程语言编写的。
这些程序是用任何语言(主要是 C)编写的普通可执行文件。
shell 接受一个输入的命令,该命令只是一个字符串。然后它会查找对 shell 具有特殊含义的某些字符序列,例如$
后跟一个单词的环境变量或>
后跟一个路径的重定向。执行此替换后,它有一个字符串,该字符串以空格分隔以生成可执行文件的名称和参数。然后,shell 将在环境变量 PATH 的目录列表中搜索可执行文件。然后,shell 使用系统调用从带有参数的可执行文件创建一个进程。
例如,为了执行命令ls $HOME
,shell 将首先识别出它$HOME
是一个环境变量,并在这种情况下将其替换为它的值,然后/home/user
离开命令ls /home/user
。然后它将命令拆分到空间上以获取可执行文件名称ls
和参数/home/user
。shell 找到第一个ls
通常匹配的可执行文件/bin/ls
。然后,它使用 spawn()/posix_spawn() 或 fork() 和 exec() 系统调用来创建新进程。