Мы хотели использовать сокат чтобы сделать доступным процесс, основанный на строке:
socat SYSTEM:"echo \$\$;sed -u /^%/s/foo/bar/" \
TCP-L:1234,fork,reuseaddr,readbytes=21,bind=localhost
Это работает, но только до тех пор, пока readbytes
предел достигнут, потому что последняя «строка» обрезается и левая сторона («СИСТЕМА») не получает новую строку до следующей строки. Например:
$ echo %foo | socat - tcp:localhost:1234
13047
%bar
$ echo foo w/o ^% | socat - tcp:localhost:1234
foo w/o ^%
$ echo %foo, here is a too long line | socat - tcp:localhost:1234
$ echo %foo | socat - tcp:localhost:1234
%bar, here is a too l%foo
В echo \$\$
там, чтобы продемонстрировать, что socat
запускает левую часть только один раз и поддерживает ее работу для нескольких клиентов. Вот что нам нужно. Но есть ли способ, например, передать новую строку в левую часть, когда правая сторона была обрезана из-за readbytes
?
Обновление 2019-03-15 00:05 UTC:
Возможно, кто-то захочет добавить ,pty,rawer
в левую сторону, однако, это не помогает в случае, когда readbytes
предел достигнут.
socat - это 1.7.3.1, работает на Debian 9, Linux 4.9.144.