[英]iPhone SDK - Forwarding touches from a UIViewController to a subview
[英]Prevent bash from forwarding stdin to stderr
我正在嘗試使用bash的交互模式實現一個簡單的終端GUI。 我成功調用了bash,獲取了它的標准輸出並將所有內容打印到文本視圖中。 我將用戶輸入從文本視圖轉發到bash的stdin ,以便能夠運行命令。 它工作得很好,除了我沒有收到任何錯誤消息。
但是,當我繼續將bash的stderr打印到我的文本視圖時,我發現了一些奇怪的東西。 除了現在收到錯誤消息之外,bash似乎傳遞了從stdin到stderr的所有內容。 因此,我輸入的每個字符都會打印兩次(一次正常,因為我輸入它,一次因為我從stderr打印所有內容)。
它似乎也通過stderr ( bash-3.2$
)打印提示。 這是預期的行為嗎? 可以抑制嗎?
我還試圖捕獲使用輸入(而不是讓用戶直接鍵入文本視圖)並依靠bash來打印用戶輸入。 這幾乎正常,除了通過stdout和stderr輸出的順序是隨機的:
如果我輸入一個像echo test
這樣的命令並點擊回車,有時我會得到這個:
(第二個test
是輸出,我沒有輸入testtest
)
bash-3.2$ echo testtest
bash-3.2$
有時我得到:
bash-3.2$ echo test
bash-3.2$ test
我收到最終\\n
,輸出和下一個bash-3.2$
的順序顯然是混淆的。
沒有辦法以“正確”的順序讀取stdout和stderr,因為不同管道之間沒有順序概念。 但是您可以確保將兩者都發送到同一個管道(即相同的文件描述符),而不是讓每個管道都轉到一個單獨的管道。 要做到這一點,請查看用於啟動bash子進程的任何選項; 或者可以啟動命令行,如bash -c 'bash 2>&1'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.