Как отключить управляющие последовательности управления терминалом в Linux?
Я пишу программное обеспечение, которое взаимодействует со встроенным устройством под управлением версии busybox Linux. По сути, я просто отправляю команды на устройство и анализирую выходные данные команд. Команды выполняются либо непосредственно в оболочке linux, либо в командной строке собственного CLI-приложения, работающего на устройстве.
Все работает отлично, за исключением того, что вывод усеян управляющими последовательностями управления терминалом. В терминальных приложениях, таких как тератерм или замазка, эти escape-последовательности выполняют полезные функции, такие как ошибки цвета красного цвета и другие приятные функции для приятного пользовательского интерфейса.
Проблема в том, что я должен программно анализировать выходные данные команд и учитывать такие вещи, как "(esc)[2k" в выходных данных.
Например, типичное взаимодействие при отправке и получении, когда я посылаю команду "my-cmd", будет выглядеть следующим образом...
[send] my-cmd
[receive] my-cmd <esc>[2Kprompt> my-cmd
output of the command
prompt>
Что я действительно хотел бы сделать, это отключить эти escape-последовательности. Это можно сделать в командной оболочке в начале сеанса? Или нет другого способа, кроме как отфильтровать вывод?
2 ответа
В большинстве (если не во всех) случаях, когда команда * 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 (возможно, и другие оболочки, но я не пробовал) следующими способами (взяты отсюда):
полный путь к команде:
/bin/ls
подстановка команд:
$(which ls)
встроенная команда:
command ls
двойные кавычки:
"ls"
одинарные кавычки:
'ls'
символ обратной косой черты:
\ls
Если вы используете один из этих методов в своем программном обеспечении, вам не нужно беспокоиться о escape-последовательностях.
Если вы находитесь на redhat или родственник, как fedora или centos, вы можете посмотреть на
модифицирующий
/etc/sysconfig/init
ищите строки, которые говорят что-то вроде:
# anything else => new style bootup without ANSI colors or positioning
BOOTUP=color
и, как он говорит, измените переменную на что-либо, кроме "цвет"
это влияет на поведение некоторых системных утилит командной строки, таких как service, ifup, ifdown и т. д.