我正在嘗試編寫一個最終將利用併發性的shell。現在我已經有了一個可用的shell解析器,但是我很難搞清楚如何執行命令。我看了一下exec
(execvp
等),它看起來很有希望,但我有一些問題。編寫一個shell - 如何執行命令
exec可以處理文件輸入/輸出重定向嗎?我可以使用exec設置管道嗎?
我也想知道subshell。什麼東西應該返回;上次聲明的退出狀態?亞殼可以成爲管道的一部分嗎?
這些看起來真的很愚蠢的問題,但請忍受我的經驗不足。
我正在嘗試編寫一個最終將利用併發性的shell。現在我已經有了一個可用的shell解析器,但是我很難搞清楚如何執行命令。我看了一下exec
(execvp
等),它看起來很有希望,但我有一些問題。編寫一個shell - 如何執行命令
exec可以處理文件輸入/輸出重定向嗎?我可以使用exec設置管道嗎?
我也想知道subshell。什麼東西應該返回;上次聲明的退出狀態?亞殼可以成爲管道的一部分嗎?
這些看起來真的很愚蠢的問題,但請忍受我的經驗不足。
exec可以處理文件輸入/輸出重定向嗎?
不,你這樣做有open()
和dup()
或dup2()
(和close()
)。
我可以使用exec設置管道嗎?
不,你這樣做有pipe()
,dup()
或dup2()
和大量的close()
電話。
我也想知道subshell。什麼東西應該返回,最後一個陳述的退出狀態?
這是正常的慣例,是的。
亞殼可以成爲管道的一部分嗎?
是的。在一個正常的外殼,你可以寫這樣的:
(cd /some/where; find . -name '*.png') | sed 's/xyz/prq/' > mapped.namelist
如果你想獲得害怕,你可以調查posix_spawn()
和支持功能。在POSIX 2008網站上搜索'spawn',並準備好被嚇到。我認爲做臨時製圖工作實際上比使用posix_spawn()
及其支持者進行編纂更容易。
爲什麼看起來好像有很多方法可以在C hahah中做同樣的事情。 因此,如果一個子shell出現在管道的右側,是否意味着左側命令的輸出成爲子shell中第一個命令的輸入?只是盲目猜測。 – user1174472
哦,出於某種原因,我可以做到這一點..'ls> file |貓',但沒有輸出。我甚至不知道這意味着什麼,我期待一個語法錯誤。對不起,有一堆愚蠢的問題讓我煩惱,我真的不知道還有什麼地方要問哈哈。 – user1174472
'ls'將其輸出發送到'file';管道上沒有任何東西出現在「貓」上。 –
作爲這些基本的Unix編程問題的參考書,我推薦[Michael Kerrisk's * Linux Programming Interface *。](http://man7.org/tlpi/)事實上,第24.2.1和27.4節(第517-520,575-578頁)回答了有關標準I/O重定向的問題。 –