我用c语言实现了一个类似bash的shell。我支持<
>
>>
;
|
和 &
.我的下一个任务是添加对 (
的支持和 )
基本上是一个子 shell 。我们如何实现子shell。我可以 fork 并让 parent 等待,传递环境变量,但我需要添加对命令的支持,如 (ls | sort) ; ls
(我承认这个命令没有多大意义,但它解释了动机)
感谢任何帮助。
最佳答案
为了实现这一点,我们解析命令行并制作树状结构。这可以在 lex
和 yacc
的帮助下完成,正如 barmer 所建议的,我们可以将每个节点命名为 subshell
pipeline
分号
。解析整个命令行后,将指向整个节点的指针传递给主程序。运行子 shell fork
然后使用传递当前环境的 execve
重新加载相同的程序。
关于c - 在 c 中实现子 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12230931/