LINUX.ORG.RU
Ответ на: комментарий от val-amart
$ mkfifo pipe
$ grep abc < pipe > res.txt &
$ echo abc > pipe 

Нужно чтобы при повторной передаче abc (abc2,abc3...) в pipe

$ echo abc > pipe
Команда
$ grep abc < pipe > res.txt &
также обрабатывала эти данные, а не завершалась после первой обработки. Надеюсь так доходчивее)

drunkmad
() автор топика
Ответ на: комментарий от val-amart

tail -f продолжает читать файл при получении EOF (а EOF приходит после любой записи в неймд пайп), он будет постепенно считывать все поступающие данные.

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

Спасибо. Только tail через конвеер что-то не работает.

tail -f pipe > grep abc > res.txt & Так работает, но при первой передаче в pipe, tail думает что abc часть файла и выводит ошибку, потом уже норм отрабатывает.

drunkmad
() автор топика

Как можно сделать, чтобы grep abc < pipe > res.txt висела(работала) постоянно в фоне и не завершалась после echo abc > pipe.

Держи открытый дескриптор на пайп и пиши в него, когда всё запишешь, закрой:

mkfifo pipe
grep abc < pipe > res.txt &
exec 7> pipe
echo abc1 >&7
echo abc2 >&7
echo abc3 >&7
exec 7>&-

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

tail -f pipe | grep abc > res.txt работает и делает ровно то что ты указал в своей команде которую ты мне показал. читает пайп, все строки содержащие подстроку «abc» записывают в файл res.txt. что именно и как не работает с такой командой, и как ты ожидаешь что она будет работать мне из твоего сообщения не ясно, если хочешь можешь расписать нормально, подробно. что ожидается и что ты наблюдаешь. твой вариант вообще адский ад, он делает совсем не то что ты думаешь.

судя по твоему уровню, возможно ты пытаешся неймд пайпом решить проблему которая очень вероятно решается по-другому. в чем состоит _исходная_ проблема?

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

Можно даже проще, в одну строку и без пайпов:

( echo abc1; echo abc2; echo abc3 ) | grep abc > res.txt

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

упс :)
ну или
chmod a+x ./res.txt
*ухожу с видом «а я откуда знаю что она там у вас делает» :)

handbrake ★★★
()
Ответ на: комментарий от val-amart

grep отрабатывает, т.е. если делать так:

tail -f pipe | grep abc &

abc попадает в STDOUT,

но если делать вывод в файл:

tail -f pipe | grep abc > res.txt &
echo abc > pipe 

res.txt создается, но он пустой, если его удалить, то он больше не создастся после повторных echo abc > pipe.

tail -f в принципе решил мою задачу и без пайпов, но хотелось бы до конца с ними разобраться и узнать где и как их применять.

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

res.txt создается, но он пустой

Буферизация же, grep --help | grep buf

baverman ★★★
()
while :; do grep abc < pipe >> res.txt; done
sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.