Я хочу отсканировать один QR-код и вернуть результат в STDOUT. Я обнаружил ZBar , небольшую симпатичную программу, которая делает почти все, что мне нужно.
$ zbarcam --raw
сканирует QR-коды с помощью камеры ПК и возвращает данные в STDOUT. Однако это не прекращается. Программа сканирует несколько кодов и возвращает их. Он останавливается только при закрытии окна видео или отправке прерывания.
Как вообще получить только первый вывод из STDOUT, завершить процесс, а затем снова отправить полученный вывод в STDOUT в командной строке? Для этого мне, наверное, нужен сценарий Bash?
Используя 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
должен сохранять во входных данных обратную косую черту и ведущие пробелы.