使用 LS 时文件名前面出现意外字符

使用 LS 时文件名前面出现意外字符

我们有一个 Arduino Yun Rev 2,其 extroot 通过 YunDiskExpander 草图设置到 32 GB 的 sandisk microSD 上,并为 extroot 分区 512 MB。

然而奇怪的是,每当我们使用 ls 时,结果前面都会有一个[数字(通常是1),后面有;两个数字(通常是34),字母m,然后我们得到文件或文件夹名称,并且后面总是会[m附加上这个名称。当在 Arduino 上运行 vim 时,每个字符似乎都会发生这种情况。

我们通过公开可用的串行监视器作为终端草图来访问它。这些意外的字符明显阻碍了开发,因此任何帮助都将不胜感激。

答案1

您所描述的内容(部分)转义序列负责改变文本的前景色。在我的 Debian 中ls可能会生成以下示例输出:

^[[01;34mfoobar^[[0m

其中^[代表单个字符:转义字符 ( 0x1b)。支持此功能的终端在收到此类数据后应以foobar蓝色打印。您没有提到零,我的测试表明这^[[1;34mfoobar^[[m也有效,因此您的ls生成可能是后一种形式。

ls尝试为其输出着色,但看起来转义字符在传输过程中由于某种原因丢失了,或者它们被正确传输,但您的终端忽略了它们(既不打印它们的表示,也不识别后面的控制序列)。实际上你看到:

[1;34mfoobar[m

纯粹ls无选择,不应使用颜色,POSIX没有提到颜色。不过,实现可能会为您提供着色输出的选项,并且通常ls将 用作 的别名ls --color=auto。通常这很有效,用户甚至可能不知道涉及别名。检查此场景是否适合您的情况:调用alias ls。我认为它确实如此。

可能的解决方案:

  • 按需求覆盖选项:ls --color=no
  • 按需绕过别名:command ls
  • 销毁别名(每个 shell 会话一次)unalias ls:;
  • 找出在哪个启动脚本中定义了别名,然后删除相关行或将其注释掉;这是一个永久的解决方案。

相关内容