[英]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.