Неожиданные символы, предшествующие именам файлов при использовании LS

Неожиданные символы, предшествующие именам файлов при использовании LS

У нас есть Arduino Yun Rev 2 с extroot, настроенным с помощью скетча YunDiskExpander на 32 ГБ microSD-карте памяти Sandisk, разбитой на разделы, отведенные под extroot на 512 МБ.

Однако, как ни странно, всякий раз, когда мы используем ls, результаты предваряются цифрой [(обычно 1), ;еще двумя цифрами (обычно 34), буквой m, а затем мы получаем имя файла или папки, которое затем всегда добавляется [mк нему. Это также, кажется, происходит с каждым символом, когда vim запущен на Arduino.

Мы получаем доступ к нему через общедоступный последовательный монитор как эскиз терминала. Эти неожиданные символы заметно мешают разработке, поэтому любая помощь будет высоко оценена.

решение1

Вещи, которые вы описали, являются (частями)последовательности выходаотвечает за изменение цвета переднего плана текста. В моем Debian lsможет генерировать следующий пример вывода:

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

где ^[представляет собой один символ: escape-символ ( 0x1b). Терминалы, которые поддерживают это, после получения таких данных должны печатать foobarсиним цветом. Вы не упомянули нули, и мои тесты показывают, что это ^[[1;34mfoobar^[[mтоже работает, так что, вероятно, вы lsгенерируете последнюю форму.

lsпытается раскрасить свой вывод, но похоже, что escape-символы теряются при передаче по какой-то причине или передаются правильно, но ваш терминал их игнорирует (не выводит их представление и не распознает управляющие последовательности, которые следуют за ними). ​​По сути, вы видите:

[1;34mfoobar[m

Чистый lsбез опций не должен использовать цвета,POSIXничего не говорит о цветах. Тем не менее, реализации могут предоставить вам возможность раскрашивать вывод, и это обычное дело для lsбыть псевдонимом для ls --color=auto. Обычно это работает хорошо, и пользователи могут даже не знать, что задействован псевдоним. Проверьте, подходит ли этот сценарий для вашего случая: invoke alias ls. Я предполагаю, что подходит.

Возможные решения:

  • переопределить опцию по требованию: ls --color=no;
  • обойти псевдоним по требованию: command ls;
  • уничтожить псевдоним (один раз за сеанс оболочки): unalias ls;
  • выясните, в каком скрипте запуска определен псевдоним, и удалите соответствующую строку или закомментируйте ее; это постоянное решение.

Связанный контент