簡體   English   中英

為什么`stty cols 40`在bash和xonsh這兩個shell中有不同的效果

[英]Why does `stty cols 40` have different effects in the two shells bash and xonsh

在 Linux/macOS 上的xonsh shell 中使用stty時出現奇怪的行為。 (命令似乎不遵守 xonsh 下定義的列,但它們在 bash 下這樣做。)

為了更好地了解這種情況,我編寫了一個小 C 程序,該程序使用TIOCGWINSZ調用ioctl用於 3 個標准流stdinstdoutstderr並打印出寬度。

在執行任何stty命令之前,我得到了 ioctl 寬度的以下結果:

bash 呸呸呸
stdin=80, stdout=80, stderr=80 stdin=80, stdout=80, stderr=80

到目前為止,一切都很好。 這意味着我的終端是 80 列寬。

現在我在每個 shell stty cols 40中發出,運行我的小程序並得到這些結果:

bash 呸呸呸
stdin=40, stdout=40, stderr=40 stdin=40, stdout=80, stderr=80

多么奇怪,在文件描述符 stdout 和 stderr 的 xonsh 下,報告的寬度為 80(!) ,而在 bash 下,所有描述符的寬度都如預期的那樣為 40。

這揭示各種命令(例如wget )不服從 xonsh 下的stty col調用這一事實。

但為什么會這樣呢? 我怎樣才能發出一個stty風格的命令,在 xonsh 下將所有標准流的寬度設置為 40?

默認情況下,stty 讀取/設置標准輸入上的終端設置。 您可以使用-F--file參數設置其他終端

stty -F /dev/stdout ...

現在的問題是,如果所有標准都連接到同一個終端,為什么標准輸入和標准輸出(和標准錯誤)之間存在差異——設置應該是每個終端,而不是每個文件描述符。 我不知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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