我们有一个 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
:; - 找出在哪个启动脚本中定义了别名,然后删除相关行或将其注释掉;这是一个永久的解决方案。