我用c语言实现了一个类似shell的bash。我支持<
>
>>
;
|
和&
。我的下一个任务是添加对(
和)
的支持,基本上是子shell。我们如何实现子shell。我可以fork并将父进行等待,传递环境变量但我需要添加对(ls | sort) ; ls
等命令的支持(我承认这个命令没有多大意义,但它解释了动机)
感谢任何帮助。
答案 0 :(得分:0)
为了实现这一点,我们解析命令行并使树状结构。这可以在lex
和yacc
的帮助下完成,而barmer建议我们可以将每个节点命名为subshell
pipeline
semicolon
。解析整个命令行后,将指向整个节点的指针传递给主程序。运行子shell fork
,然后使用execve
通过当前环境重新加载相同的程序。