1

В bash у меня есть команда, работающая на экране:

while true
do
  echo $RANDOM
  sleep 1
done

Выход которого:

12396
19683
31641
...

Я хотел бы передать это во что-то вроде grep/awk, и я соответствую определенному шаблону, такому как 12345 , я хочу выполнить команду.

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

Это можно легко сделать в bash?

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

1 ответ1

1
./feeding_script.sh |
tee >(while read a; do [ "$a" == "12345" ] && </dev/null another_command; done)

Заметки:

  • tee разбивает поток данных; одна копия отправляется в "файл", который в данном случае является командой >(…) , другая - в терминал;
  • </dev/null another_command - это перенаправление предотвращает использование another_command данных, сгенерированных feeding_script.sh .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .