LINUX.ORG.RU

Подача строки каждую минуту и сохранение интерактивности.

 , , , ,


0

2

Надо на стандартный ввод запущенной консольной программе каждую минуту подавать определённую команду (строку) и вместе с тем надо что бы терминал не заблокировался и можно было вручную вводить другие строки и смотреть вывод программы на мониторе. Как это сделать на bash не понимаю совсем. Прошу помогите.

костыльненько, но можно screen / tmux (man -> поиск по send) - в crontab команду, чтобы поминутно посылала в соответствующее окошко ввод.

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

А допустим если использовать ковеер:

rep | mine

где rep это

do
sleep 60
cat string.txt
lood

Как сделать так что бы ввод с клавиатуры не терялся и вывод тоже шёл на экран?

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

То есть, чтобы в середине пользовательского ввода не влезал автоматический?

Это уже сложнее, если есть знание perl - можно попробовать посмотреть в сторону фильтров для rlwrap.

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

Это не обязательно. Хотя желательно.

rezedent12 ☆☆☆
() автор топика
rep | tee $(tty) | mine &

Как-то так, если я правильно понимаю задачу

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

minecraft 12w38b

стандартное решение - запустите его внутри screen, каждую минуту можно коннектится к screen-сессии и выполнять команду.

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

стандартное решение - запустите его внутри screen, каждую минуту можно коннектится к screen-сессии и выполнять команду.

хм.. а как бы это автоматизировать? Присоединение и отсоединение от сессии?

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

Кстати, я сейчас поэкспериментировал.

Создаю поток

mkfifo file.txt

Читаю из потока

 cat file.txt 

Пишу в поток с двух источников Бесконечный ввод

cat > file.txt

Разовая подача строки

 echo "string" > file.txt 

Вроде всё работает

Но как в одной команде совместить вывод на экран и ввод в поток?

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

Вроде наполовину сделал то что надо. Даже строки по отдельности посылает. www.linux.org.ru/add_comment.jsp?topic=8263123&replyto=8264159

Но остался вопрос, как сделать одновременный ввод в поток с клавиатуры и вывод на экран другого потока?

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

Но как в одной команде совместить вывод на экран и ввод в поток?

tail -f выводит на экран. tee file пишет и в файл, И в терминал.

Если захочется использовать sed или там grep, обратите внимание на ключи --unbuffered и --line-buffered соответственно, что-бы отключить буферизацию PIPE (иначе они накапливают ввод, и плюются кусками в 64К, а может и больше. А вам нужно построчно)

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

С потоками она и не работает нормально.

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

То есть так?

cat поток_вывода &
cat> поток ввода

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

Заодно выяснил, если с одного потока вывод берут две команды, то строки рандомно достигают то одного то другого приложения. А нужно так что бы строки достигали всех двух приложений.

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

тебе уже писали тут эту команду - tee.

рекомендую незнакомые слова из ответов на твои сообщения вбивать в man.

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