【问题标题】:Shell commands are written in what language?Shell 命令是用什么语言编写的?
【发布时间】:2013-09-27 09:06:57
【问题描述】:

有很多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程序是用什么语言写的?

【问题讨论】:

  • 我是一个初学者,很困惑。这可能会更好地解释我。
  • 我不确定,但我认为它们是用汇编语言编写的。查看here 了解更多关于组装的信息。

标签: linux bash shell kernel


【解决方案1】:

linux 中的大多数基本实用程序都是用C 编写的。你可以在busybox source code 中验证它支持大多数用C 编写的基本linux 命令实用程序。 所以像 ls,cd ...etc 这样的命令在c

shell 将如何解释以下链接中的检查

在操作系统中有一个特殊的程序叫做shell。 shell 接受人类可读的命令并将它们翻译成内核可以读取和处理的东西。

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

【讨论】:

  • 谢谢!这篇文章看起来非常好,而且很容易理解内核和 shell 的工作原理。
  • 如果您想了解命令的工作原理,如 ls ,您可以查看busy box source-code
  • 我会了解 {busy box source-code }。但如果可能的话,请你解释一下。
【解决方案2】:

这些程序和 linux 内核一样主要是用 C 编程语言编写的。

【讨论】:

  • 根据我的理解,命令可能是用 Shell 编程语言编写的,比如 Bash。虽然 Shell 程序(如 Bash)是 C 语言(不确定它是否可以是汇编语言)。
【解决方案3】:

这些程序是用任何语言(主要是 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() 系统调用来创建新进程。

【讨论】:

  • 请多解释!通过给出一个命令的例子。解释以下内容: - 替换环境变量(用户名等) - 生成可执行文件和参数 - 使用系统调用来创建进程
猜你喜欢
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多