我想扫描一个二维码并将结果返回到 STDOUT。我发现錶杆,这是一个很好的小程序,几乎可以满足我的所有需求。
$ zbarcam --raw
使用 PC 摄像头扫描二维码并将数据返回到 STDOUT。但是,它不会终止。该程序扫描多个代码并返回它们。它只有在关闭视频窗口或发送中断时才会停止。
我通常如何仅从 STDOUT 获取第一个输出,终止进程,然后在命令行中再次将收到的输出发送到 STDOUT?我可能需要一个 Bash 脚本来实现这一点,对吗?
答案1
正如@user986805在评论中提到的那样,有一个--oneshot
zbar v0.23.1 中的选项发布日期:2021-02-13 (问题,拉取请求)。
- ...
- 添加一次性扫描模式
zbarcam --raw --oneshot
此处zbarcam
将第一个可检测的二维码/条形码值输出到stdout
,然后终止。请注意,使用 组合时--raw --oneshot
,没有尾随\n
换行符。
不幸的是man zbarcam
(见Ubuntu 的man zbarcam
)似乎没有列出选项,但两者zbarcam --help
和zbarimg --help
确实;已验证zbar v0.23.93从 2024-01-09 开始。
答案2
使用bash
,并假设只有一行需要读取(二维码没有嵌入换行符),你可以尝试
(echo $BASHPID; exec zbarcam --raw ) |
(read pid; IFS= read -r line; kill -hup "$pid"; printf "%s\n" "$line")
因为在子 shell 中$BASHPID
不会$$
改变,所以父 shell pid 也是如此。应该IFS= read -r
在输入中保留反斜杠和前导空格。