Я построил следующую sed
команду:
$ sed '/^Node-path: branches\//s/Node-path: branches\/\([-A-Za-z0-9]*\) \
\([-A-Za-z0-9]*\)/Node-path: branches\/\1_\2/' < sedtest
Он выглядит большим и уродливым, но в данной ситуации работает.
Обратите внимание, что это не исправляет несколько вхождений пробела в имени ветки, только одно (, поэтому я повторно -запущу команду, если мне нужно ).
Кстати, если вы делаете это для исправления дампа SVN, не забудьте таким же образом исправить строки Node-copyfrom-path:
.
Я думаю, что ответ, который вы ищете, это использовать systemd.socket
Допустим, у меня есть программа, которая читает стандартный ввод и записывает в стандартный вывод. Вы можете настроить systemd, чтобы сделать это доступным через сокет.
Вот пример настройки systemd для этого:
# /etc/systemd/system/simple.socket
[Socket]
Accept=yes
ListenStream=11111
# /etc/systemd/system/simple@.service
[Unit]
Description="Simple service"
After=network.target simple.socket
Requires=simple.socket
[Service]
Type=simple
ExecStart=-cat -
StanardInput=socket
StandardOutput=socket
Затем запустите сокет с помощью:
$ sudo systemctl start simple.socket
Теперь вы можете запустить службу, установив сокет. Я использую nc
или netcat
для этого:
$ nc 127.0.0.1 11111
В ExecStart
я решил использовать cat -
, который просто ретранслирует stdin на stdout. Когда мы запустим nc
, мы обнаружим, что все, что мы вводим в стандартный ввод, будет возвращено нам через стандартный вывод. Вероятно, у вас есть более интересное приложение, которое вы захотите запустить.
Еще несколько интересных моментов:
cat
не работает, если у вас нет открытого сокета (сокет прослушивается, но служба остановлена ).