在 Linux/macOS 上stty
的xonsh shell 中使用时出现奇怪的行为。(命令似乎不遵守 xonsh 下定义的列,但它们在 bash 下这样做。)
为了更好地理解这种情况,我编写了一个小 C 程序,它为 3 个标准流调用ioctl ,并打印出宽度。TIOCGWINSZ
stdin
stdout
stderr
在执行任何stty
命令之前,我得到以下 ioctl 宽度的结果:
重击 | 呸呸呸 |
---|---|
stdin=80, stdout=80, stderr=80 |
stdin=80, stdout=80, stderr=80 |
到目前为止,一切都很好。这意味着我的终端是 80 列宽。
现在我在每个 shell 中发出stty cols 40
,运行我的小程序并得到这些结果:
重击 | 呸呸呸 |
---|---|
stdin=40, stdout=40, stderr=40 |
stdin=40, stdout=80, stderr=80 |
多么奇怪,在 xonsh 下,文件描述符 stdout 和 stderr 报告的宽度为 80(!),而在 bash 下,所有描述符都按预期的宽度为 40。
这揭示了各种命令(例如wget
)不服从stty col
xonsh 下的调用这一事实。
但为什么会这样呢?我怎样才能发出一个stty
-style 命令,在 xonsh 下将所有标准流的宽度设置为 40?