管道输出到 bash 命令的中间

Posted

技术标签:

【中文标题】管道输出到 bash 命令的中间【英文标题】:piping output into middle of bash command 【发布时间】:2015-12-07 15:44:57 【问题描述】:

与这个问题有点相关:Convert audio files to mp3 using ffmpeg

我想在 BASH 中使用管道在一行中执行一个命令。

我想要做的是:

echo "Hello" | somecommand | ffmpeg -i _____ -f mp2 output.mp3 

_____somecommand 的输出。有什么方法可以实现吗?

【问题讨论】:

ffmpeg 支持libflite 可以从文本文件中制作音频。 【参考方案1】:

您可以在中间参数中使用command substitution

ffmpeg -i "$(echo 'Hello' | somecommand)" -f mp2 output.mp3 

【讨论】:

somecommand 实际上代表text2wave 函数,那么我如何从中获取输出 .wav 文件并将其传递给 ffmpeg? 是的,我已经展示了相同的行语法。它将是:ffmpeg -i "$(echo 'Hello' | text2wave)" -f mp2 output.mp3 当我在终端中运行时,我收到一条错误消息“文件名太长”。为了实际保存到 .wav 文件,必须这样做:text2wave -o file.wav text2wave 是否将输出写入您要在ffmpeg 命令中使用的终端? 否,text2wave 创建一个我想在 ffmpeg 中使用的输出 wav 文件【参考方案2】:

尝试使用 xargs

echo "Hello" | somecommand | xargs ffmpeg -f mp2 output.mp3 -i

echo "Hello" | somecommand | xargs -i ffmpeg -i  -f mp2 output.mp3

【讨论】:

xargs -i 是我最好的新朋友!

以上是关于管道输出到 bash 命令的中间的主要内容,如果未能解决你的问题,请参考以下文章

数据流重定向和管道命令(bash学习02)

管道命令输出到 tee 但也保存命令的退出代码 [重复]

重定向与管道

从 Git Bash 管道输出到剪贴板

是否可以使用相同的输入文件作为管道命令的输出?

捕获 find 的输出。 -print0 到 bash 数组中