32

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

executable -v -i inputFile.txt -o outputFile.eps

为了更高效,我想使用 Bash 变量代替输入文件。所以,我想做如下的事情:

executable -v -i ["${inputData}"] -o outputFile.eps

在这里,方括号代表一些聪明的代码。

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

非常感谢你的协助

4

4 回答 4

56

您可以使用以下构造:

<(command)

因此,要让 bash 使用命令为您创建一个 FIFO,而不是您的尝试-i ["${inputData}"],您可以这样做:

-i <(echo "$inputData")

因此,这是您的最终总命令:

executable -v -i <(echo "$inputData") -o outputFile.eps
于 2013-02-12T19:49:28.483 回答
14

Echo 不能安全地用于任意输入

要正确处理inputdata='\ntest'or之类的病理情况inputdata='-e',您需要

executable -v -i <(cat <<< "$inputData")

zsh中,cat是不必要的


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

executable -v -i <(printf "%s" "$inputData")
于 2018-03-27T17:54:13.397 回答
3

注意:仅限 zsh:

要获取包含 的内容的文件名${variable},请使用:

<(<<<${variable})

笔记:

  • <<<${variable}重定向STDIN来自${variable}
  • <<<${variable}相当于(但比)快cat <<<${variable}

所以对于OP的情况:

executable -v -i <(<<<${inputData}) -o outputFile.eps
于 2018-06-25T11:06:23.917 回答
-3
executable -v -i <<<"${inputData}" -o outputFile.eps

在 bash 中解决问题。

于 2017-04-27T20:35:31.167 回答