每当任何 WSL 程序将“\t”输出到 stdout 时,“Bash for windows”应用程序的行为都非常奇怪。制表符后的第一个字符被绘制在最后当前行的位置。如果之后还有更多内容,它们将换行到下一行。我不知道这是怎么发生的,也不知道什么时候发生的,因为我已经很久没有使用 WSL 了。下面是一个例子:
- 在你问之前,是的,它适用于任何我从终端调用的程序。
- 我已将所有内容更新至最新版本,但问题仍未得到解决。
- 如果可能的话,我宁愿不重新安装整个系统。至少我想保留 Linux 文件系统中的文件。
那么这是由什么原因造成的?我该如何解决?
编辑:
- 这里没有特殊的预览版本,只有默认更新设置的普通 Windows 10。
- 版本 1903,内部版本 18362.476。上次更新为 KB4524570。
- 发行版是 Ubuntu。我记得当我安装它时,Ubuntu 是唯一可用的。不过可能是错的。
答案1
这似乎是标准的 Bash 终端功能,而不仅仅是 WSL。您可以使用命令设置 Bash 控制台中使用的制表符宽度tabs
。您可以使用tabs -N
将制表符间隔设置为 N 个字符,tabs -0
(重置制表符)似乎重现了您描述的行为,并将tabs -8
制表符设置为标准间隔(8 个字符)。您可以tabs --help
在提示符下使用以查看选项。如果您使用echo
带有-e
选项的命令,您可以看到效果。
将tabs -0
制表符间隔设置为当前控制台宽度,但与我的旧版 WSL Ubuntu 有一点不同。我已尝试使用 WSL、Raspberry Pi 上的 LXterminal 和 Debian 9 文本登录。
在 WSL 安装的旧版(非 WSL2)标准 WSL 终端上,tabs -0
似乎将控制台中的选项卡宽度设置为一些奇怪的(非常宽的)值,通常大于当前终端窗口(大约 231 个字符),但如果我打开 Windows CMD 控制台,并通过键入来调出 WSL bash
,或者wsl
则行为如下所示。
在新 Windows 终端(预览版)、Raspbian 和 Debian 上,它遵循当前窗口大小。
Raspberry Pi LX终端
新的 Windows 终端预览版(旧版 WSL Ubuntu)
Debian 9 文本控制台: