AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[process-substitution](unix)

Martin Hope
Fedja M.
Asked: 2022-04-05 09:08:16 +0800 CST

Tesseract 不接受进程替换

  • 0

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

#!/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据我所知,进程替换应该生成用作输入文件的临时文件(类似于我的完整脚本) 。唉,这会导致错误:

Error in pixReadStream: Unknown format: no pix returned
Error in pixRead: pix not read
Error during processing.

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

提前致谢。

shell-script process-substitution
  • 1 个回答
  • 38 Views
Martin Hope
Francisco De Zuviria
Asked: 2018-08-13 19:51:15 +0800 CST

简单的 cat echo 进程替换挂起

  • 0

用 cat 进行简单的进程替换似乎挂起:

cat >( echo hello; )

永远不会结束。也试过:

cat >( echo hello; exit; )

从子进程手动关闭标准输出文件描述也不起作用:

cat >( echo hello; 1>&- )
cat >( echo hello; 1>&- exit; )

我尝试过使用 GNU bash,版本 4.4.23(1)-release,GNU bash,版本 4.1.2(2)-release 和 zsh 5.5.1 (x86_64-debian-linux-gnu)

有人可以解释为什么会这样吗?我真的很喜欢过程替换......

谢谢

编辑:如果 cat 要从 echo 中读取,则进程替换中的正确重定向是:

cat <( echo hello; )
bash process-substitution
  • 4 个回答
  • 1478 Views
Martin Hope
user3002473
Asked: 2018-02-09 18:01:25 +0800 CST

误解进程替换的目的

  • 2

我想我缺少对流程替换用例的一些理解。我的直觉是,形式的进程替换<(COMMANDS)将执行COMMANDS,然后将程序的结果提供给它所属的任何命令,因此command1 <(command2)将评估command2并将结果作为第一个参数传递给command1.

我认为以下方法会起作用:

$ for i in <(cat list.txt); do echo $i; done

其中list.txt是包含单词列表(由换行符分隔)的文件。当我运行它时,它只是输出/dev/fd/63,我只能假设它是在进程替换中创建的子 shell 输出的临时路径名?

我认为上面的方法会起作用,因为它在我写的时候工作得很好

$ for i in `cat list.txt`; do echo $i; done

我以前从未见过这种`表示法,它到底是什么意思?我对流程替换缺乏什么理解?

process-substitution
  • 1 个回答
  • 87 Views
Martin Hope
nponeccop
Asked: 2017-12-01 22:21:56 +0800 CST

在 MacOs 上迭代地写入同一个进程替换文件

  • 1

以下 bash-fu 代码在 Linux 上运行良好,但在 MacOS 上中断:

files="foo bar"

echo PROG 1
for file in $files
do
  echo $file | tee -a tempfile.txt
done

sort -u tempfile.txt

echo PROG 2
function trick {
  for file in $files
  do
    echo $file | tee -a $1
  done
}

trick >(sort -u)

错误是:

PROG 1
foo
bar
bar
foo
PROG 2
tee: /dev/fd/63: Bad file descriptor
foo
tee: /dev/fd/63: Bad file descriptor
bar

在 Linux 上写入与没有错误PROG 2相同的行。PROG 1在 MacOS 上,管道句柄似乎已关闭或未继承。

以上是重现问题的最小化样本。实际上,我会大量处理绑定输出和重定向句柄。精神上的东西

function trick {
  for file in $files
  do
     echo $file | tee -a $1 | grep -Eo "^.."
  done
}

trick >(sort -u | sed 's|o|x|g')

该代码在 Bash 4.1 中不起作用,但在多个发行版(Arch、Ubuntu 和 Debian)中的 Bash 4.4 中起作用

bash process-substitution
  • 1 个回答
  • 449 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve