LINUX.ORG.RU

Коллбэки на стандартный ввод, однострочник

 , ,


0

1

Нужно в момент появления в стандартном выводе строки совпадающей с регуляркой выполнять команду с возможностью передачи этой строки в качестве аргумента.

Можно конечно запилить на [p]expect. Но душа требует однострочных велосипедов на bash.

UPD: понял, анон и @legolegs отправили почитать меня man grep и взять оттуда --line-buffered, за что им и спасибо, жалко никто шоткат туда не придумал.

А вы считали? В grep уже все короткие опции из букв латинского алфавита есть?

★★★★★

Последнее исправление: pon4ik (всего исправлений: 2)

Но душа требует однострочных велосипедов на bash.

echo "this test pattern" | grep "pattern" | $(sed 's/^/echo /;s/$/\; /')
echo -e "this\n test\n pattern\n" | grep "pattern" | $(sed 's/^/echo /;s/$/\; /')
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

в момент появления в стандартном выводе строки, совпадающей с регуляркой,

grep pattern...

выполнять команду с возможностью передачи этой строки в качестве аргумента.

... | while read str; do cmd "$str"; done

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

Когда в ваших руках молоток, всё вокруг начинает казаться гвоздём(c). Хотя от тебя я бы ожидал рекомендации использовать Qt. Или тёмные времена позади?

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

Теперь подставь вместо echo - tail -f и представь что событий сотни.

dmesg | grep "usb" | while read tline; do echo "$tline"; done
Deleted
()
Ответ на: комментарий от Deleted

Неправильно выразился. В общем нужно что бы команда выполнялась до разрыва пайпа. Буквально в тот момент, когда был осуществлён вывод(ну разумеется плюс издержки и буфера).

В общем нужен сахар для expect или что-то того же назначения.

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

от тебя я бы ожидал рекомендации использовать Qt

Каждой задаче свой инструмент. Для скриптов - питон. Для GUI - Qt. Лучше ничего пока не придумали.

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

Лучше ничего пока не придумали.

«Лучшее - враг хорошего».

Deleted
()
Ответ на: комментарий от pon4ik

К слову я не знаю как это сделать на питоне, но на Qt это делается на раз два =)

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

Посмотри хелп по pexpect и примеры, может понятней будет, я х3 как лучше объяснить пока не придумал формулировку.

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

А, вот ты о чем. Нет, ждать закрытия пайпа не обязательно, но да, буферизация может мешать. Тогда просто убери grep и проверяй строку башем. Я так выхлоп inotify разбираю, все работает в реальном времени.

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

Т.е. для людей делалось если, то ещё бы должна быть где-то настройка размера буфера i/o, и/(в идеале)или настройка триггера его сброса? Это настройка glibc?

pon4ik ★★★★★
() автор топика

Тот, кто придумал звать на лоре по макрдаунавски затеял крайне азартную и опасную игру.

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