【问题标题】:Implementing a subshell in c在c中实现子shell
【发布时间】:2012-08-27 04:35:56
【问题描述】:

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

感谢任何帮助。

【问题讨论】:

  • 显示代码并显示您遇到问题的地方。
  • bash 是开源的,你为什么不看看它是怎么做的?
  • 我没有问题,只是没有实现esubshel​​l的想法。
  • @Barmar:我觉得我会迷失在代码中,但我猜这是最后一个选择
  • 一旦你fork,子进程就会像在主shell中一样实现ls | sort

标签: c shell unix posix


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    相关资源
    最近更新 更多