Можно отменить “владение” программы от оболочки с disown
встроенный:
# press Ctrl+Z to suspend the program
bg
disown
Однако это только говорит оболочке не отправлять a SIGHUP
предупредите к программе, когда оболочка выйдет. Программа сохранит любое соединение, которое она имеет с терминалом, обычно как стандартный вход, потоки вывода и потоки сообщений об ошибках. Нет никакого способа повторно прикрепить тех, которые к другому терминалу. (Экранные работы путем эмуляции терминала для каждого окна, таким образом, программы присоединены к экранному окну.)
Возможно повторно прикрепить filedescriptors к другому файлу путем присоединения программы в отладчике (т.е. использование ptrace
) и то, чтобы заставлять это звонить open
, dup
и close
. Существует несколько инструментов, которые делают это; это - хитрый процесс, и иногда они будут разрушать процесс вместо этого. Возможности включают (ссылки, собранные от ответов до того, Как я могу отрицать рабочий процесс и связать его к новой экранной оболочке? и Могу я nohup/screen уже запущенный процесс?):
Вы думали бы, что будет утилита для этого, но я не мог найти его. Однако эта острота Perl должна добиться цели:
perl -pe 's/\e\[?.*?[\@-~]//g'
Пример:
$ command-that-produces-colored-output | perl -pe 's/\e\[?.*?[\@-~]//g' > outfile
Или, если Вы хотите сценарий, можно сохранить как stripcolorcodes
:
#! /usr/bin/perl
use strict;
use warnings;
while (<>) {
s/\e\[?.*?[\@-~]//g; # Strip ANSI escape codes
print;
}
Если Вы хотите разделить только цветовые коды и оставить какие-либо другие коды ANSI (как перемещение курсора) одними, использовать
s/\e\[[\d;]*m//g;
вместо замены я использовал выше (который удаляет все управляющие коды ANSI).
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
Или
Установите colorama пакет Python (pip install colorama
). Помещенный в stripcolorcodes
:
#!/usr/bin/env python
import colorama, fileinput, sys;
colorama.init(strip=True);
for line in fileinput.input():
sys.stdout.write(line)
Выполненный chmod +x stripcolorcodes
.
sed
впечатляющее Примечание :)
–
17.11.2017, 10:23
Если можно установить Термин:: модуль ANSIColor, этот сценарий жемчуга работы:
#!/usr/bin/env perl
use Term::ANSIColor qw(colorstrip);
print colorstrip $_ while <>;
Если система имеет доступ к NodeJS, то можно установить следующий пакет Node, strip-ansi-cli
.
$ npm install -g strip-ansi-cli
Затем вы можете выполнить свою команду так:
$ command-that-produces-colored-output | strip-ansi > outfile
Term::ANSIColor
. Подтвердите свои источники! – forivall 22.11.2013, 02:13