如何将variables的值传递给命令的stdin?

我正在编写一个shell脚本,应该有点安全,即不通过命令的parameter passing安全的数据,最好不使用临时文件。 我如何将一个variables传递给命令的stdin? 或者,如果不可能,如何正确使用临时文件来完成这样的任务?

一些简单的事情:

 echo "$blah" | my_cmd 

在stdin上传递一个值很简单:

 your-command <<< "$your_variable" 

总是确保你把variablesexpression式引号!

请注意,“ echo "$var" | command echo "$var" | command操作意味着标准input仅限于回显的行。 如果你还想要连接terminal,那么你需要更有趣:

 { echo "$var"; cat - ; } | command ( echo "$var"; cat - ) | command 

这意味着第一行将是$var的内容,但其余部分将来自cat阅读其标准input。 如果这个命令没有做任何事情(尝试打开命令行编辑,或者像vim那样运行),那就没事了。 否则,你需要变得很花哨 – 我认为expect或其衍生工具可能是适当的。

命令行符号实际上是相同的 – 但第二个分号对于大括号是必要的,而不是括号。

我喜欢马丁的答案,但根据variables中的内容,它有一些问题。 这个

 your-command <<< """$your_variable""" 

如果你的variables包含“或!

 (cat <<END $passwd END ) | command 

cat并不是真的需要,但它有助于更​​好地构build代码,并允许在括号中使用更多的命令作为命令的input。

尝试这个:

 echo "$variable" | command 

根据Martin的回答,有一个叫做Here Strings的bash特性(它本身是更广泛支持的Here Documents特性的一个变体)。

http://www.gnu.org/software/bash/manual/bashref.html#Here-Strings

3.6.7这里string

这里的一个变种文件,格式是:

 <<< word 

这个词被扩展并提供给它的标准input命令。

请注意,这里的string看起来只是bash,所以为了提高可移植性,根据PoltoS的回答,最好使用原始的“Here Documents”function:

 ( cat <<EOF $variable EOF ) | cmd 

或者,上面的一个简单的变体:

 (cmd <<EOF $variable EOF ) 

您可以省略() ,除非您希望将其redirect到其他命令。