2

在 Linux/macOS 上sttyxonsh shell 中使用时出现奇怪的行为。(命令似乎不遵守 xonsh 下定义的列,但它们在 bash 下这样做。)

为了更好地理解这种情况,我编写了一个小 C 程序,它为 3 个标准流调用ioctl ,打印出宽度。TIOCGWINSZstdinstdoutstderr

在执行任何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 colxonsh 下的调用这一事实。

但为什么会这样呢?我怎样才能发出一个stty-style 命令,在 xonsh 下将所有标准流的宽度设置为 40?

4

1 回答 1

1

默认情况下,stty 读取/设置标准输入上的终端设置。-F您可以使用or--file参数设置其他终端

stty -F /dev/stdout ...

现在的问题是,如果所有标准都连接到同一个终端,为什么标准输入和标准输出(和标准错误)之间存在差异——设置应该是每个终端,而不是每个文件描述符。我不知道。

于 2021-02-20T02:33:45.820 回答