使用击变量代替文件作为输入的为一个可执行(using a Bash variable in plac

2019-07-19 19:10发布

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

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

为了更有效率,我希望在的地方输入文件的使用猛砸变量。 所以,我想要做的东西像下面这样:

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

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

你知道一些窍门,让我来管信息将在此方式所描述的可执行文件?

非常感谢你的协助

Answer 1:

您可以使用结构

<(command)

有bash的创建命令的输出为您FIFO。 所以,只是尝试:

-i <(echo "$inputData")


Answer 2:

回声是不是安全使用任意输入 。

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

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

zsh ,该cat是没有必要的


编辑:即使这增加了一个结尾的新行。 要输出精确的变量内容逐字节,你需要

executable -v -i <(printf "%s" "$inputData")


Answer 3:

注意:只有zsh中:

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

<(<<<${variable})

注意:

  • <<<${variable}重定向STDIN来自${variable}
  • <<<${variable}等同于(但速度比) cat <<<${variable}

所以对于OP的情况:

executable -v -i <(<<<${inputData}) -o outputFile.eps


Answer 4:

假设您的可执行文件的名称是exec和定义的变量名是x,你想传递x的值作为输入的可执行文件。 然后这样做:

$ echo $x > stdin && ./exec < stdin

这将做的工作



Answer 5:

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

会做的伎俩在bash。



文章来源: using a Bash variable in place of a file as input for an executable
标签: file pipe bash