1

我已经用 c 语言实现了一个类似于 shell 的 bash。我支持< > >> ; |&。我的下一个任务是添加对基本上是子shell 的(支持)。我们如何实现子shell。我可以分叉并让父等待,传递环境变量,但我需要添加对命令的支持(ls | sort) ; ls(我承认该命令没有多大意义,但它解释了动机)

任何帮助表示赞赏。

4

1 回答 1

0

为了实现这一点,我们解析命令行并制作一个树状结构。这可以在 and 的帮助下完成,lex并且yacc正如 barmer 建议的那样,我们可以将每个节点命名为subshell pipeline semicolon. 解析整个命令行后,将指向整个节点的指针传递给主程序。运行子shell fork,然后使用execve传递当前环境重新加载相同的程序。

于 2012-09-03T17:59:35.393 回答