Получить первый вывод из STDOUT и завершить процесс

Я хочу отсканировать один QR-код и вернуть результат в STDOUT. Я обнаружил ZBar , небольшую симпатичную программу, которая делает почти все, что мне нужно.

$ zbarcam --raw

сканирует QR-коды с помощью камеры ПК и возвращает данные в STDOUT. Однако это не прекращается. Программа сканирует несколько кодов и возвращает их. Он останавливается только при закрытии окна видео или отправке прерывания.

Как вообще получить только первый вывод из STDOUT, завершить процесс, а затем снова отправить полученный вывод в STDOUT в командной строке? Для этого мне, наверное, нужен сценарий Bash?

0
задан 4 July 2021 в 14:38

1 ответ

Используя bash , и предполагая, что есть только одна строка для чтения (qrcode не имеет встроенных символов новой строки), вы можете попробовать

(echo $BASHPID; exec zbarcam --raw ) | 
(read pid; IFS= read -r line; kill -hup "$pid"; printf "%s\n" "$line")

$ BASHPID - это потому, что $$ не изменяется в подоболочках, как и родительский pid оболочки. IFS = read -r должен сохранять во входных данных обратную косую черту и ведущие пробелы.

0
ответ дан 28 July 2021 в 11:22

Другие вопросы по тегам:

Похожие вопросы: