使用Bash变量代替文件作为可执行文件的输入

d3p*_*3pd 18 bash file pipe

我有一个可执行文件,使用方式如下:

executable -v -i inputFile.txt -o outputFile.eps
Run Code Online (Sandbox Code Playgroud)

为了提高效率,我想使用Bash变量代替输入文件.所以,我想做类似以下的事情:

executable -v -i ["${inputData}"] -o outputFile.eps
Run Code Online (Sandbox Code Playgroud)

方括号代表一些聪明的代码.

你知道一些技巧可以让我以这种方式将信息传递到所描述的可执行文件中吗?

非常感谢你的协助

mik*_*yra 30

您可以使用该构造

<(command)
Run Code Online (Sandbox Code Playgroud)

让bash为你创建一个带有命令输出的fifo.所以试试吧:

-i <(echo "$inputData")
Run Code Online (Sandbox Code Playgroud)

  • 这个过程替换正是我所需要的。非常感谢你的协助! (2认同)
  • https://www.gnu.org/software/bash/manual/bash.html#Process-Substitution值得阅读本节 (2认同)
  • 如果“inputData”包含文字反斜杠,或者是“-e”,则会失败 (2认同)

Eri*_*ric 6

回声对于任意输入使用是不安全的.

要正确处理病理情况下像inputdata='\ntest'或者inputdata='-e',你需要

executable -v -i <(cat <<< "$inputData")
Run Code Online (Sandbox Code Playgroud)

zsh,cat没有必要


编辑:即使这会添加一个尾随换行符.要逐字节输出确切的变量内容,您需要

executable -v -i <(printf "%s" "$inputData")
Run Code Online (Sandbox Code Playgroud)