2016-12-16 13 views
5

Tôi tìm thấy điều này trong một số mã tôi đã làm việc trên. Nó được thiết kế để làm việc xung quanh một yêu cầu để đọc một keyfile từ đĩa. Trong sản xuất, nội dung của keyfile nằm trong một biến môi trường.File.read ("| echo mystring") hoạt động như thế nào?

Cũ mã:

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

Code mới:

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

làm việc như thế này?

+3

Đó là .... một cách kỳ lạ để đọc env var. Nên là 'ENV ['KEY_VARIABLE']'. –

+1

@sergio thư viện nhận được var chỉ hỗ trợ tên tệp là tham số – djb

+1

FWIW, điều này làm việc với tất cả các lệnh: 'File.read ('| uptime')'. Tôi giả sử nó là một tính năng 'IO' cung cấp, nhưng tôi chưa bao giờ nhìn thấy nó và có vẻ thú vị. Đáng sợ. Nhưng thú vị. – berkes

Trả lời

9

Từ IO docs:

Một chuỗi bắt đầu bằng “|” cho thấy một tiến trình con. Phần còn lại của chuỗi sau “|” được gọi là một quá trình với các kênh đầu vào/đầu ra thích hợp được kết nối với nó.

Bit "kênh được kết nối" có nghĩa là đầu ra của quy trình sẽ trở thành đầu vào cho read. Vì vậy, trong ví dụ này, kết quả từ echo của biến môi trường có thể được đọc.

+2

TIL. Nếu bạn chưa có danh sách trắng đầu vào cho tên tệp do người dùng tạo trong gem, ứng dụng hoặc công cụ của bạn, đây là thời điểm để làm như vậy. '/ reports/1337? filename =% 7C% 20rm% 20-rf% 20% 2F% 20 - không giữ nguyên gốc – berkes

Các vấn đề liên quan