从 STDOUT 获取第一个二维码并终止进程

从 STDOUT 获取第一个二维码并终止进程

我想扫描一个二维码并将结果返回到 STDOUT。我发现錶杆,这是一个很好的小程序,几乎可以满足我的所有需求。

$ zbarcam --raw

使用 PC 摄像头扫描二维码并将数据返回到 STDOUT。但是,它不会终止。该程序扫描多个代码并返回它们。它只有在关闭视频窗口或发送中断时才会停止。

我通常如何仅从 STDOUT 获取第一个输出,终止进程,然后在命令行中再次将收到的输出发送到 STDOUT?我可能需要一个 Bash 脚本来实现这一点,对吗?

答案1

正如@user986805在评论中提到的那样,有一个--oneshotzbar v0.23.1 中的选项发布日期:2021-02-13 (问题拉取请求)。

0.23.1

  • ...
  • 添加一次性扫描模式
zbarcam --raw --oneshot

此处zbarcam将第一个可检测的二维码/条形码值输出到stdout,然后终止。请注意,使用 组合时--raw --oneshot,没有尾随\n换行符。

不幸的是man zbarcam(见Ubuntu 的man zbarcam)似乎没有列出选项,但两者zbarcam --helpzbarimg --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在输入中保留反斜杠和前导空格。

相关内容