2016-12-16 58 views
5

我在一些我正在编写的代码中发现了这个。它旨在解决从磁盘读取密钥文件的需求。在生产中,密钥文件的内容在环境变量中。File.read(“| echo mystring”)如何工作?

旧代码:

key = File.read('path/to/key.pem') 

新代码:

key = File.read('| echo $KEY_VARIABLE') 

这是如何工作的?

+3

这是一个奇怪的方式来阅读env var。应该是'ENV ['KEY_VARIABLE']'。 –

+1

@sergio接收到var的库仅支持文件名作为参数 – djb

+1

FWIW,它适用于所有命令:'File.read('| uptime')'。我认为这是'IO'提供的功能,但我从来没有见过它,它看起来很有趣。害怕。但有趣。 – berkes

回答

9

IO docs

以A开头的字符串“|”表示的子进程。 “|”后面的字符串的其余部分被调用为具有与其相连的适当输入/输出通道的进程。

“通道连接”位表示过程的输出将成为read的输入。所以在这个例子中,可以读取环境变量的echo的结果。

+2

TIL。如果您尚未将您的宝石,应用程序或工具中用户生成文件名的输入列入白名单,那么现在是时候这样做了。 '/报告/ 1337名=%7C%20RM%20-RF%20%2F%20 - 无保留-root' – berkes