วิธีตั้งค่าตัวแปรสภาพแวดล้อมในเปลือกปลา


93

ใครช่วยบอกหน่อยได้ไหมว่าอะไรคือวิธีที่ถูกต้องในการตั้งค่าตัวแปรสภาพแวดล้อมในเปลือกปลา

ในไฟล์. config / fish / config.fish ของฉันฉันมีฟังก์ชันในการตั้งค่าตัวแปรสภาพแวดล้อมของฉันเช่นนั้น

function setTESTENV
      set -x BROKER_IP '10.14.16.216'
      set -x USERNAME 'foo'
      set -x USERPASS 'bar'
end 

เมื่อฉันพิมพ์จากพรอมต์คำสั่งsetTESTENVและทำenvในบรรทัดคำสั่งฉันไม่เห็นข้อมูลเหล่านี้

คำตอบ:


73

ตัวแปรที่คุณประกาศจะอยู่ในขอบเขตภายในฟังก์ชันของคุณ

ใช้:

set -g -x

นี่คือ " g" สำหรับทั่วโลก


156

ใช้ตัวแปรสากล

หากต้องใช้ตัวแปรร่วมกันระหว่างอินสแตนซ์ fish ของผู้ใช้ปัจจุบันทั้งหมดบนคอมพิวเตอร์ปัจจุบันและเก็บรักษาไว้ระหว่างการรีสตาร์ทเชลล์คุณต้องใช้-Uหรือ--universal:

set -Ux FOO bar

ใช้setด้วย-gหรือ--globalไม่ได้กำหนดตัวแปรเสมอระหว่างกรณีเปลือก


บันทึก :

อย่าผนวกเข้ากับตัวแปรสากลในconfig.fishไฟล์เนื่องจากตัวแปรเหล่านี้จะยาวขึ้นในแต่ละอินสแตนซ์เชลล์ใหม่ ให้เรียกใช้ set -Uxเพียงครั้งเดียวที่บรรทัดคำสั่งแทน และจะถูกเก็บไว้ในไฟล์.config/fish/fishd.MACHINE_IDซึ่งMACHINE_IDโดยปกติจะเป็นที่อยู่ MAC ของคุณ


ตัวแปรของฉันไม่ได้รับการบันทึกในfishd.MACHINE_IDแต่ถูกบันทึกไว้ใน~/.config/fish/fish_variables
Seanny123

ตัวแปรของฉันถูกบันทึกใน~/.config/fish/fish_variablesอูบุนตู 20.04
Igor Markelov

13

อีกทางเลือกหนึ่งคือเรียกใช้:

export (cat env_file.txt |xargs -L 1)

โดยที่ env_file.txt มีแถวของรูปแบบ VAR=VALUE

สิ่งนี้มีประโยชน์ในการรักษาตัวแปรให้อยู่ในรูปแบบที่เชลล์และเครื่องมืออื่น ๆ รองรับ


1
ในกรณีที่คุณต้องการหลีกเลี่ยงความคิดเห็นคุณสามารถ: export (grep "^[^#]" .env |xargs -L 1)
Guillermo

10

ตัวแปรสภาพแวดล้อมในปลา

ฉันต้องการเพิ่มว่าในขณะที่คำตอบของ @ JosEduSol ไม่ถูกต้องและช่วยแก้ปัญหา OP -gได้ แต่ตั้งค่าขอบเขตให้เป็นแบบโกลบอลเท่านั้นในขณะที่-xทำให้ตัวแปรสภาพแวดล้อมที่ระบุถูกส่งออกไปยังกระบวนการย่อย

สาเหตุข้างต้นล้มเหลวเนื่องจาก @cfpete กำลังตั้งค่า env vars ภายในฟังก์ชันและขอบเขตเริ่มต้นจะเป็นแบบโลคัลสำหรับฟังก์ชันนั้น

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