มียูทิลิตี้ในการอ่านตัวแปรสภาพแวดล้อมจากไฟล์ env แล้วเรียกใช้คำสั่ง (เบากว่าโฟร์แมน) หรือไม่?


16

foreman สามารถอ่านไฟล์. env และตั้งค่าตัวแปรสภาพแวดล้อมจากเนื้อหาแล้วเรียกใช้โปรแกรม

เช่น foreman run -e vars.env myprogram

... แต่มันทำสิ่งอื่น ๆ อีกมากมาย (และเกี่ยวข้องกับการเริ่มต้นโดยใช้รูปแบบ Procfile เป็นหลัก)

มีเครื่องมือที่ง่ายกว่า (Linux / Unix) ที่เน้นการอ่านไฟล์. env และดำเนินการคำสั่งด้วยสภาพแวดล้อมใหม่หรือไม่?

ไฟล์สภาพแวดล้อมตัวอย่าง (จากhttp://ddollar.github.io/foreman/#ENVIRONMENT ):

FOO=bar
BAZ=qux

1
คุณสามารถโพสต์ไฟล์. env ตัวอย่างได้หรือไม่? ฉันสงสัยbash .envหรือsh .envอาจทำงานได้?
Daniel Widrick

@ IVlint67 ฉันได้ปรับปรุงคำถามเล็กน้อย
wodow

คำตอบ:


19

คุณสามารถระบุไฟล์สภาพแวดล้อมใน active shell และรันโปรแกรม:

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

-aสวิทช์ส่งออกตัวแปรทั้งหมดเพื่อให้พวกเขามีอยู่ในการเขียนโปรแกรม


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

@fiatjaf ทำไมคุณถึงใช้ bash ในกรณีนี้ถ้าเชลล์ POSIX ทำงานและคุณไม่ต้องการฟีเจอร์ที่ต้องใช้ bash จริงๆ? นอกจากนี้ค่าเริ่มต้นของ bash จะไม่สามารถใช้ได้ในทุกระบบ (เช่น FreeBSD)
Marco

โอ้ใช่แล้วสมเหตุสมผลแล้วฉันคิดว่าวิธีของคุณดีกว่าแล้ว ฉันแค่ให้ทางเลือก Bash เพราะฉันรู้สึกสะดวกสบายในการเขียนมากกว่า
fiatjaf

2

อีกทางเลือกหนึ่งคือenvdir:

envdir เรียกใช้โปรแกรมอื่นที่มีสภาพแวดล้อมที่ปรับเปลี่ยนตามไฟล์ในไดเรกทอรีที่ระบุ


โพสต์นี้กล่าวถึงคุณสมบัติเสริมบางอย่างระหว่างenvdir, runitและchpst; กล่าวคือความสามารถในการเปลี่ยน env vars สะท้อนให้เห็นถึงสถานะของกระบวนการที่กำลังทำงานอยู่ โพสต์เกี่ยวกับนักเทียบท่า แต่ไม่ จำกัด เฉพาะนักเทียบท่า blog.ghaering.de/post/docker-as-vm [archive.org: web.archive.org/web/20190321165332/https://blog.ghaering.de/… ]
driftcatcher

2

ฉันลองsource .envแล้วมันใช้งานได้เหมือนมีเสน่ห์ น่าเสียดายที่ไม่มีวิธีแก้ไขปัญหาอื่น ๆ ที่โพสต์ที่นี่ทำงานให้ฉัน


0

งานนี้:

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

แต่เห็นได้ชัดว่าไม่ได้ตรวจสอบรูปแบบของ.envไฟล์เพื่อความถูกต้องซึ่งโปรแกรมอรรถประโยชน์จะทำ


1) catไม่จำเป็นเพียงแค่เขียนtr "\\n" " " < .env2) ตัวแบ่งนี้หากใช้การมอบหมายหลายบรรทัด
มาร์โก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.