首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Tesseract不接受进程替换

Tesseract不接受进程替换
EN

Unix & Linux用户
提问于 2022-04-04 17:08:16
回答 1查看 64关注 0票数 0

我正在制作一个快速脚本,应该使用剪贴板中图像上的OCR工具(tesseract)将其转换为文本并输出。看起来是这样的:

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/sh

temp="$(mktemp tmpXXX.png)"
xclip -selection clipboard -t image/png -o > $temp
tesseract $temp stdout 2>/dev/null
rm $temp

我想知道为什么这个单线tesseract <(xclip -selection clipboard -t image/png -o) stdout不能工作?据我所知,进程替换应该生成临时文件(类似于我的完整脚本),tesseract将其用作输入文件。唉,这导致了一个错误:

代码语言:javascript
代码运行次数:0
运行
复制
Error in pixReadStream: Unknown format: no pix returned
Error in pixRead: pix not read
Error during processing.

有人知道为什么会这样吗?

提前谢谢。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-04-04 18:10:17

进程替换是一种ksh特性(在zsh和bash中也是可用的),而不是使用管道(在支持/dev/fd/n的系统上未命名,而不是临时文件)。

在这里,tesseract可能需要能够在文件中查找或者预先知道它的大小,这在管道中是不可能的。它还可以期望文件名具有特定的扩展名。

对于使用临时文件的进程替换,您需要只在=(...)外壳中可用的zsh表单。

代码语言:javascript
代码运行次数:0
运行
复制
tesseract =(xclip -selection clipboard -t image/png -o) stdout

您可以设置$TMPPREFIX (默认为/tmp/zsh)和/或$TMPSUFFIX (默认为空),以控制=(...)创建的临时文件是如何命名的。

代码语言:javascript
代码运行次数:0
运行
复制
TMPSUFFIX=.png
tesseract =(xclip -selection clipboard -t image/png -o) stdout

例如。

在5.0之前的zsh和bash版本中,以及在Linux或Cygwin上,您还可以:

代码语言:javascript
代码运行次数:0
运行
复制
{
  xclip -selection clipboard -t image/png -o > /dev/fd/3 &&
    tesseract /dev/fd/3 stdout
} 3<<< ''

由于遗传和字符串(以前在bash中)被实现为已删除的临时文件,并且在Linux和Cygwin上,打开/dev/fd/n (其中n是在文件上打开的文件描述符)将打开该文件,而不是像在大多数(如果不是所有其他系统)上那样重复fd。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/697958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档