将管道传递给需要文件名的命令

Ste*_*ett 24 bash pipe command

假设我有一个foo带有文件名参数的命令:foo myfile.txt. 令人讨厌的是,foo不从标准输入读取。我想将另一个命令的结果传递给它,而不是实际的文件(实际上,pv,它将捕获文件并输出进度表作为副作用)。

有没有办法做到这一点?我的技巧包中似乎没有任何东西可以做到。

foo在这种情况下是一个 PHP 脚本,我相信它会按顺序处理文件)。

我正在使用 Ubuntu 和 Bash

编辑抱歉,问题描述有点不清楚,但这是我想要的答案:

pv longfile.txt | foo /dev/stdin
Run Code Online (Sandbox Code Playgroud)

现在我看到它非常明显。

Gor*_*son 23

如果我明白你想正确地做什么,你可以用 bash 的命令替换功能来做:

foo <(somecommand | pv)
Run Code Online (Sandbox Code Playgroud)

这与mkfifo基于 -based 的答案所建议的类似,除了 bash 为您处理细节(并且它最终将 /dev/fd/63 之类的东西传递给命令,而不是常规命名管道)。你也可以像这样更直接地做到这一点:

somecommand | pv | foo /dev/stdin
Run Code Online (Sandbox Code Playgroud)

  • 哦,好一个!这个`pv inputfile.txt | foo /dev/stdin` 正是我一直在寻找但没有想到的。 (3认同)
  • 如果您在脚本中使用此功能,请注意您需要使用“#!/bin/bash”而不是“#!/bin/sh”启动脚本,否则此功能将引发错误。 (2认同)