Передать управление терминалом серверу, с которым связываются через HTTP.

sed -e 's/,$//' -e '/^[^|]*$/s/$/|/' file.in |
awk -F'[|,]' -vOFS='|' '{ for (i = 2; i <= NF; ++i) { print $1, $i } }'

sedвыполняет предварительную обработку входных данных. Он удаляет конечные запятые в конце каждой строки (-e 's/,$//'), а если строка не содержит символ вертикальной черты, добавляет ее в конец(-e '/^[^|]*$/s/$/|/').

Данные примера преобразуются в следующие с помощью фильтра sed:

Item1|keys,books,helmet,handle
Item2|Bike
Item3|
Item4|Tyre,brakes,headlight,clamps,rollergrip
Item5|Nails,hammers

Сценарий awkберет это и интерпретирует каждую строку как набор полей, разделенных вертикальной чертой или запятой(-F'[|,]'). Затем для каждой входной строки он будет повторно соединять первое поле с каждым из других полей и выводить их. Каждая пара полей в выходных данных разделена вертикальной чертой (-vOFS='|').

Результат

Item1|keys
Item1|books
Item1|helmet
Item1|handle
Item2|Bike
Item3|
Item4|Tyre
Item4|brakes
Item4|headlight
Item4|clamps
Item4|rollergrip
Item5|Nails
Item5|hammers
0
22.08.2019, 19:09
1 ответ

Мне удалось решить эту проблему, передав путь к файлу терминального устройства через http. Вы можете получить этот путь с помощью:tty

$ curl http://my.app/cli?argv=do&argv=something&tty=$(tty)

Тогда нужно просто открыть переданный tty-файл на сервере и прочитать/записать в него вместо STDIN/STDOUT.

0
28.01.2020, 03:20

Теги

Похожие вопросы