簡體   English   中英

防止bash將stdin轉發給stderr

[英]Prevent bash from forwarding stdin to stderr

我正在嘗試使用bash的交互模式實現一個簡單的終端GUI。 我成功調用了bash,獲取了它的標准輸出並將所有內容打印到文本視圖中。 我將用戶輸入從文本視圖轉發到bash的stdin ,以便能夠運行命令。 它工作得很好,除了我沒有收到任何錯誤消息。

但是,當我繼續將bash的stderr打印到我的文本視圖時,我發現了一些奇怪的東西。 除了現在收到錯誤消息之外,bash似乎傳遞了從stdinstderr的所有內容。 因此,我輸入的每個字符都會打印兩次(一次正常,因為我輸入它,一次因為我從stderr打印所有內容)。

它似乎也通過stderrbash-3.2$ )打印提示。 這是預期的行為嗎? 可以抑制嗎?

我還試圖捕獲使用輸入(而不是讓用戶直接鍵入文本視圖)並依靠bash來打印用戶輸入。 這幾乎正​​常,除了通過stdoutstderr輸出的順序是隨機的:

如果我輸入一個像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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM