创建UNIX shell

Kee*_*eto 7 unix shell

我想为UNIX创建一个迷你shell,只是为了了解一切的来龙去脉.我有些困惑,理解我曾经认为理所当然的事情.这是一个哲学问题.当我创建一个"shell"时,我假设我有一个没有shell的UNIX,那么在这种情况下std in和std会是什么?没有像system()和exec()这样的函数使用shell来执行程序,所以如果我首先创建一个shell.这些功能如何运作?

sar*_*old 3

系列中有几个函数execexecve(2)execl(3)execle(3)execlp(3)execv(3)execvp(3)。第一个execve(2)是由操作系统内核作为系统调用提供的。(好吧,程序调用的函数是由系统 C 库提供的,但是系统调用的简单包装。)其他函数提供稍微不同的语义,并根据函数来实现execve(2)

shell 可以使用execvp(3)execlp(3)提供PATH对可执行文件的搜索,但至少对可执行文件的完整路径名bash(1) 进行哈希处理以提供性能优势。(有关详细信息,请参阅bash(1)内置hash。)

system(3)正如您所猜测的那样,是通过 实现的/bin/sh -c

标准输入和输出由生成 shell 的程序设置。如果用户直接在控制台上登录,它将由agetty(8)mgetty(8)或 任何getty处理直接登录的类似程序来处理。如果用户通过 登录sshd(8),则sshd(8)负责创建pty并将终端从站委托给 shell。如果用户通过xterm(1)或其他终端仿真器创建 shell,那么这些进程将负责连接 shell 的标准输入、输出和错误。