Có tiện ích nào để đọc các biến môi trường từ tệp env và sau đó chạy lệnh (nhẹ hơn foreman) không?


16

foreman có thể đọc tệp .env và đặt biến môi trường từ nội dung, sau đó chạy chương trình

ví dụ foreman run -e vars.env myprogram

... nhưng nó còn làm rất nhiều thứ khác (và chủ yếu liên quan đến việc bắt đầu mọi thứ bằng cách sử dụng định dạng Procfile của nó).

Có một công cụ đơn giản (Linux / Unix) nào chỉ tập trung vào việc đọc các tệp .env và thực thi một lệnh với môi trường mới không?

Ví dụ về tệp môi trường (từ http://ddollar.github.io/foreman/#ENVIRONMENT ):

FOO=bar
BAZ=qux

1
Bạn có thể gửi một tập tin ví dụ .env? Tôi nghi ngờ bash .envhoặc sh .envcó thể làm việc?
Daniel Widrick

@ IVlint67 Tôi đã cải thiện câu hỏi một chút.
wodow

Câu trả lời:


19

Bạn có thể nguồn tệp môi trường trong trình bao hoạt động và chạy chương trình:

sh -ac ' . ./.env; /usr/local/bin/someprogram'

Công -atắc xuất tất cả các biến, để chúng có sẵn cho chương trình.


3
bash -ac 'source .env && ./program'
fiatjaf

@fiatjaf Tại sao bạn sẽ sử dụng bash trong trường hợp này nếu shell POSIX thực hiện công việc và bạn không cần tính năng nào thực sự yêu cầu bash? Hơn nữa, bash không có sẵn theo mặc định trên tất cả các hệ thống (ví dụ FreeBSD).
Marco

Oh, đúng, có ý nghĩa, tôi nghĩ rằng cách của bạn là tốt hơn, sau đó. Tôi chỉ cung cấp giải pháp thay thế Bash vì tôi cảm thấy thoải mái hơn khi viết nó.
fiatjaf

2

Một cách khác là envdir:

envdir chạy một chương trình khác với môi trường được sửa đổi theo các tệp trong một thư mục được chỉ định.


Bài viết này đề cập đến một số tính năng bổ sung giữa envdir, runitchpst; cụ thể là khả năng đã thay đổi các lọ env phản ánh trong trạng thái của quá trình đang được chạy. Bài viết về docker nhưng nó không giới hạn ở docker. blog.ghaering.de/post/docker-as-vm [archive.org: web.archive.org/web/20190321165332/https://blog.ghaering.de/... ]
driftcatcher

2

Tôi đã thử source .envvà nó hoạt động như một lá bùa. Thật không may, không có giải pháp nào khác được đăng ở đây làm việc cho tôi.


0

Những công việc này:

env $(cat .env | tr "\\n" " ") myprogram

nhưng rõ ràng không kiểm tra định dạng của .envtệp cho chính xác, điều mà một chương trình tiện ích sẽ làm.


1) catKhông cần thiết, chỉ cần viết tr "\\n" " " < .env2) Điều này sẽ phá vỡ nếu các bài tập nhiều dòng được sử dụng.
Marco
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.