5

Я пишу программное обеспечение, которое взаимодействует со встроенным устройством под управлением версии busybox Linux. По сути, я просто отправляю команды на устройство и анализирую выходные данные команд. Команды выполняются либо непосредственно в оболочке linux, либо в командной строке внутреннего приложения CLI, работающего на устройстве.

Все работает отлично, за исключением того, что вывод усеян управляющими последовательностями управления терминалом. В терминальных приложениях, таких как teraterm или putty, эти escape-последовательности выполняют полезные функции, такие как ошибки цвета красного цвета и другие приятные функции для приятного пользовательского интерфейса.

Проблема в том, что я должен программно анализировать выходные данные команд и учитывать такие вещи, как "(esc)[2k" в выходных данных.

Например, типичное взаимодействие при отправке и получении, когда я отправляю команду «my-cmd», будет выглядеть следующим образом ...

[send] my-cmd
[receive] my-cmd <esc>[2Kprompt> my-cmd
output of the command
prompt> 

Что я действительно хотел бы сделать, это отключить эти escape-последовательности. Это можно сделать в командной оболочке в начале сеанса? Или нет другого способа, кроме как отфильтровать вывод?

2 ответа2

3

В большинстве (если не во всех) случаях, когда команда * nix печатает цветной вывод без специального запроса пользователя с опцией псевдонимов. Фактически, во многих дистрибутивах Linux есть псевдоним для ls и grep указывающий цвета в глобальном /etc/bash.bashrc .

Это из моего Linux Mint Debian Edition:

$ grep alias /etc/bash.bashrc
    alias ls='ls --color=auto'
    alias grep='grep --colour=auto'

Итак, если ваша программа вызывает эти команды через BASH, вы запускаете ls --color=auto вместо ls .

Вы можете обойти псевдонимы в BASH (возможно, и другие оболочки, но я не пробовал) следующими способами (взяты отсюда):

  1. полный путь к команде: /bin/ls

  2. подстановка команды: $(which ls)

  3. встроенная команда: command ls

  4. двойные кавычки: "ls"

  5. одинарные кавычки: 'ls'

  6. символ обратной косой черты: \ls

Если вы используете один из этих методов в своем программном обеспечении, вам не нужно беспокоиться о escape-последовательностях.

0

Если вы находитесь на Redhat или родственник, как Fedora или Centos, вы можете посмотреть на
модифицирующий

/etc/sysconfig/init

ищите строки, которые говорят что-то вроде:

 # anything else => new style bootup without ANSI colors or positioning

 BOOTUP=color

и как он говорит, измените переменную на что-нибудь, кроме "цвет"

это влияет на поведение некоторых системных утилит командной строки, таких как service, ifup, ifdown и т. д.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .