使用 LS 時檔案名稱前面出現意外字符

使用 LS 時檔案名稱前面出現意外字符

我們有一個 Arduino Yun Rev 2,透過 YunDiskExpander 草圖將 extroot 設定到 32 GB sandisk microSD 上,分割區為 extroot 提供 512 MB 空間。

然而奇怪的是,每當我們使用 ls 時,結果都會以一個[數字(通常是1)和;兩個數字(通常是34)字母開頭m,然後我們得到文件或資料夾名稱,然後總是附加[m到它後面。當 vim 在 Arduino 上運行時,這似乎也會發生在每個字元上。

我們透過公開可用的串行監視器作為終端草圖來存取它。這些意想不到的特徵明顯阻礙了發展,因此我們將不勝感激任何幫助。

答案1

您所描述的內容是(部分)轉義序列負責改變文字的前景色。在我的 Debian 中ls可能會產生以下範例輸出:

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

其中^[代表單一字元:轉義字元 ( 0x1b)。支援此功能的終端應在收到此類資料後以foobar藍色列印。您沒有提到零,我的測試表明它^[[1;34mfoobar^[[m也有效,所以您可能ls會產生後一種形式。

ls嘗試對其輸出進行著色,但看起來轉義字元由於某種原因在傳輸中丟失,或者它們被正確傳輸,但您的終端忽略它們(既不列印它們的表示也不識別後面的控制序列)。實際上你會看到:

[1;34mfoobar[m

純粹ls的沒有選項不應該使用顏色,POSIX沒有提到顏色。儘管如此,實作仍然可以為您提供對輸出進行著色的選項,並且通常lsls --color=auto.通常這很有效,用戶甚至可能不知道涉及別名。檢查此場景是否適合您的情況:invoke alias ls。我想確實如此。

可能的解決方案:

  • 根據需要覆蓋該選項:ls --color=no;
  • 按需繞過別名:command ls;
  • 銷毀別名(每個 shell 會話一次)unalias ls:;
  • 找出別名是在哪個啟動腳本中定義的,並刪除相關行或註解掉;這是一個永久的解決方案。

相關內容