Предотвратить escape-последовательности ANSI в выводе терминала
Когда я делаю "ls -l" на моем linux-боксе поверх PuTTY, он дает чистый, красиво окрашенный вывод.
Но когда я пытаюсь сделать то же самое программным способом, я получаю все виды управляющих последовательностей, которые, вероятно, обозначают эти значения цвета.
Можно ли как-то установить параметры терминала, чтобы он не отправлял эти дополнительные последовательности для цветов, а просто излучал простой текст?
[00mtotal 8956
drwxr-xr-x 8 pradymn users 4096 2010-07-23 12:29 [01;34mtestsb1[00m
drwxr-xr-x 5 pradymn users 4096 2010-07-24 22:49 [01;34mtest1[00m
-rw-r--r-- 1 pradymn users 9143013 2010-07-24 23:03 [00;31mtest1.tar.gz[00m
4 ответа
Это, вероятно, связано с тем, как вы настраиваете свой ls для отображения цветов. Если вы можете опубликовать это, мы могли бы быть более полезными.
Я рекомендую использовать следующее в вашем любимом файле профиля оболочки (.bashrc):alias ls="ls --color=auto"
Кроме того, если вы не хотите выводить цвет, вы можете вызвать ls, используя --color=never
Другой альтернативой является использование утилиты ansicon, которая находится между консолью и plink и переводит цветовые коды ANSI на лету:
$ ansicon.exe plink.exe user@host
Вы можете удалить escape-последовательности ANSI с помощью следующего регулярного выражения Java (например):
\\[..;..[m]|\\[.{0,2}[m]|\\(Page \\d+\\)|\u001B\\[[K]|\u001B|\u000F
Чтобы добавить к ответу Роба:
Экранирующие последовательности ANSI должны интерпретироваться программой эмулятора терминала (или реальным аппаратным терминалом). PuTTY является одновременно эмулятором терминала и SSH-клиентом в одной программе.
Но plink
просто клиент SSH, предназначенный для передачи необработанных двоичных данных; он не интерпретирует последовательности ANSI, а просто передает их в терминал, в котором он работает. В Windows терминал является консолью Windows - и он также не поддерживает ANSI.
Если вы хотите использовать SSH из командной строки, попробуйте Cygwin-версию OpenSSH. PuTTY также может быть запущен из командной строки.
У меня работает следующая фильтрация:
some-program | perl -pe 's/\e\[[0-9;]*[a-zA-Z]//g'