[英]Writing a shell - how to execute commands
我正在尝试编写一个将最终利用并发性的shell。 现在,我有一个运行中的shell解析器,但是在弄清楚如何执行命令时遇到了麻烦。 我看了一下exec
( execvp
等),看起来很有希望,但是我有一些疑问。
exec可以处理文件输入/输出重定向吗? 我可以使用exec设置管道吗?
我也想知道子壳。 子外壳应该返回什么? 最后一条语句的退出状态? 子壳可以成为管道的一部分吗?
这些问题看起来似乎很愚蠢,但请您耐心等待。
exec可以处理文件输入/输出重定向吗?
不,您可以使用open()
和dup()
或dup2()
(和close()
)来实现。
我可以使用exec设置管道吗?
不,您可以使用pipe()
, dup()
或dup2()
以及大量close()
调用来实现。
我也想知道子壳。 子外壳应该返回什么,最后一个语句的退出状态?
这是正常的惯例,是的。
子壳可以成为管道的一部分吗?
是。 在普通的shell中,您可以编写如下内容:
(cd /some/where; find . -name '*.png') | sed 's/xyz/prq/' > mapped.namelist
如果您想害怕,可以研究posix_spawn()
及其支持功能。 在POSIX 2008网站上搜索“ spawn”,并准备好害怕。 我认为,临时进行映射工作实际上比使用posix_spawn()
及其支持者进行posix_spawn()
更容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.