LINUX.ORG.RU

Как вывод программы script перенаправить на вход программы ansi2html -i -a ?

 , ,


2

1

ansi2html это аналог aha, только опакеченный (это хорошо) и требует питона (это плохо)

Проблема в том, что имя файла, в который программа script записывает вывод, передаётся в качестве параметра командной строки...

Вопросы:

1) как всё-таки перенаправить? (в одной команде, а не используя cat после драки)

2) Если бы вы писали программу-аналог для программы script - вы бы сделали так же или по-другому? (и если по-другому, то как именно)?

man script

-f' Flush output after each write. This is nice for telecooperation: One person does 'mkfifo foo; script -f foo' and another can supervise real-time what is being done using 'cat foo'.

anonymous
()

Если бы вы писали программу-аналог для программы script - вы бы сделали так же или по-другому? (и если по-другому, то как именно)?

Ну, дык, это. Вывод не в файл, а в stdout, а дальше уже по необходимости либо пайпом на другую программу, либо в файл через >

Думаю можно как-то заставить script писать не в файл, а в stdout.

MrClon ★★★★★
()

Как обычно делается? если хочешь в stdout, то вместо имени файла пишется чёрточка, т.е. -.

Если пересобрать нельзя, то можно: через pipe, через временные файлы, man mktemp. Как-то так.

Infra_HDC ★★★★★
()
Последнее исправление: Infra_HDC (всего исправлений: 1)
Ответ на: комментарий от anonymous

это в другой консоли

вопрос-то был, как это всё проделать одной командой. А если консолей две, то и команд будет две...

Indaril_Shpritz
() автор топика
Ответ на: комментарий от Indaril_Shpritz

ключ -f — это файл? Тогда с пайпом как-то так:

mkfifo /tmp/script-temp.fifo
script /tmp/script-temp.fifo &
ansi2html -i -a -f /tmp/script-temp.fifo
rm -f /tmp/script-temp.fifo

Infra_HDC ★★★★★
()
Ответ на: комментарий от anonymous

что делает ansi2html?

меняет шило на мыло.
получает на входе файл с ansi-последовательностями и выдаёт на выход файл с html-последовательностями

зачем все это используется

чтобы сохранить цветной вывод консольных команд на память в виде, удобном для просмотра в броузере

Indaril_Shpritz
() автор топика
Ответ на: комментарий от Indaril_Shpritz

гм. причём тут ключ -f ? Тыц.

-f SIZE, --font-size=SIZE

Set the global font size in the output.

Поэтому

mkfifo /tmp/script-temp.fifo
script /tmp/script-temp.fifo &
cat /tmp/script-temp.fifo | ansi2html -i -a -f <нужный_тебе_размер_шрифта>
rm -f /tmp/script-temp.fifo

Ненамного изящней, не находишь?

Infra_HDC ★★★★★
()
Последнее исправление: Infra_HDC (всего исправлений: 1)

Башизм:

script >(ansi2html -i -a)

Bash запускает ansi2html -i -a, соединяет его stdout с одним из файловых дескрипторов процесса script и передаёт /dev/fd/номер_дескриптора в качестве имени файла.

AITap ★★★★★
()
Ответ на: комментарий от AITap

Вау, круть какая!

Только я не понял принцип, потому что вот так:

leafpad >( script >(ansi2html -i -a) )
не работает.

И так

script >(ansi2html -i -a | tee leafpad)
тоже.

Как мне результат ansi2html дальше перенаправить тем же способом?

Indaril_Shpritz
() автор топика
Ответ на: комментарий от Indaril_Shpritz

>(команда) создаёт «имя файла», в который можно записать. Если нужно «имя файла» для чтения из него, нужно делать <(команда).

ansi2html печатает свой вывод дальше на stdout? Можно было бы попробовать leafpad <( script >(ansi2html -i -a) ), но при этом script не получает себе терминал, чтобы запустить на нём шелл.

А вот конструкция вида script >( ansi2html -i -a | leafpad /dev/stdin ) у меня заработала.

AITap ★★★★★
()
Ответ на: комментарий от AITap

при этом script не получает себе терминал

вот именно.

конструкция вида {тут перенаправление вывода} у меня заработала.

Ну это же другая конструкция, у меня чувство прекрасного протестует...

Indaril_Shpritz
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.