![](/img/trans.png)
[英]Why does TIOCSTI injection disable stty echo in bash when used with bind?
[英]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 個標准流stdin
、 stdout
、 stderr
並打印出寬度。
在執行任何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.