Допустим, у меня есть приложение командной строки, которое требует ввода, затем показывает список выходов, а затем вам нужно выбрать один из них, чтобы продолжить. Как я могу сделать это с bash?
Пример: Давайте возьмем приложение youtube-viewer, которое использует mpv для воспроизведения видео с youtube. Если я напишу на терминале
echo beatles | youtube-viewer
, он покажет индексированный список заголовков видео, и он будет ждать в ожидании , пока я не введу число:
= >> Выберите одно или несколько видео для воспроизведения (: h для справки)
Итак, вот оно. Идея состоит в том, чтобы использовать Rofi в качестве «интерфейса». В идеале я бы
rofi -dmenu | youtube-viewer
Теперь, все, что я наберу на rofi, будет передано в youtube-viewer. Когда я набираю «Beatles» в окне rofi, он будет транслироваться на youtube-viewer, создавая следующий список на терминале
- The Beatles - Hey Jude (by TheBeatlesVEVO) [08:10]
- The Beatles - Не подведи меня (автор TheBeatlesVEVO) [03:32]
- Полный альбом The Beatles Greatest Hits - Лучший плейлист The Beatles Songs (автор Jazz Musi c) [53:03]
- The Beatles - Помогите! (от TheBeatlesVEVO) [02:20]
Мне хотелось бы вывести этот список на rofi, так что я бы выбрал один из них, а затем добавил в | awk {print $1};
Я бы получил целое число , который будет возвращен youtube-viewer, который при получении этого номера продолжит открывать видео на mpv.
Сначала я подумал, что это будет работать:
rofi -dmenu | youtube-viewer | rofi -dmenu
Но Я полагаю, что это не так, потому что youtube-viewer никогда не завершает работу, пока у него не будет второго входа (конкретный выбор видео), поэтому он никогда не попадает в список на rofi. Кроме того, даже если бы у меня был список на rofi, и я мог бы получить номер индекса в awk, я не знаю, как мне снова его вернуть в youtube-viewer.
Теперь, возможно, к этому конкретному примеру можно подойти другим способом, но я хотел бы найти решение для того, что я объяснил, так как в этом случае я столкнулся и с другими приложениями, когда пытался написать сценарий bash, и я никогда не знаю, как действовать дальше. Это очень просто, когда речь идет о вводе строки и получении вывода, чтобы продолжить работу скрипта, но когда он вводится + второй ввод, я застреваю.
TL; DR: Возможно, я немного растерялся о том, как спроектировать это, но основная идея в том, что я хотел бы взаимодействовать с приложением командной строки, таким как youtube-viewer, через rofi (или dmenu).