File.read("| echo mystring")如何工作?

djb*_*djb 5 ruby

我在一些正在研究的代码中找到了这个.它旨在解决从磁盘读取密钥文件的要求.在生产中,密钥文件的内容位于环境变量中.

旧代码:

key = File.read('path/to/key.pem')
Run Code Online (Sandbox Code Playgroud)

新代码:

key = File.read('| echo $KEY_VARIABLE')
Run Code Online (Sandbox Code Playgroud)

这是如何运作的?

mik*_*kej 9

来自IO文档:

以"|"开头的字符串表示子进程."|"后面的字符串的其余部分被调用为具有连接到它的适当输入/输出通道的进程.

"通道连接"位意味着进程的输出将成为输入read.因此,在此示例中,echo可以读取环境变量的结果.

  • TIL.如果您尚未将gem,应用程序或工具中用户生成的文件名的输入列入白名单,那么就是这样做的时刻.`/报告/ 1337名=%7C%20RM%20-RF%20%2F%20 - 无保留-root` (2认同)