เป็นวิธีที่ดีที่สุดในการตั้งค่าตัวแปรสภาพแวดล้อมใน. bashrc คืออะไร?


11

เมื่อตั้งค่าตัวแปร.bashrcฉันควรใช้สิ่งนี้หรือไม่?

export VAR=value

หรือนี่จะเพียงพอหรือไม่

VAR=value

ความแตกต่างคืออะไร (ถ้ามี)

คำตอบ:


16

วิธีที่ดีที่สุด

export VAR=value

ความแตกต่าง

การทำ

VAR=value

ตั้งค่าตัวแปรสำหรับช่วงเวลาของสคริปต์เท่านั้น ( .bashrcในกรณีนี้) กระบวนการลูก (ถ้ามี) ของสคริปต์จะไม่ได้กำหนด VAR และเมื่อออกจากสคริปต์VARแล้ว

export VAR=value

เพิ่มอย่างชัดเจนVARในรายการตัวแปรที่ส่งผ่านไปยังกระบวนการลูก อยากลองไหม เปิดเปลือกทำ

PS1="foo > "
bash --norc

เชลล์ใหม่ได้รับพรอมต์เริ่มต้น ถ้าคุณทำสิ่งที่ชอบแทน

export PS1="foo > "
bash --norc

เชลล์ใหม่จะได้รับพรอมต์ที่คุณเพิ่งตั้ง

ปรับปรุง:เป็นบันทึกเอียน Kelling ด้านล่างตัวแปรตั้งอยู่ในยังคงมีอยู่ในเปลือกที่มา.bashrc .bashrcโดยทั่วไปเมื่อใดก็ตามที่เชลล์ใช้source scriptnameตัวแปรสคริปต์ (โดยใช้คำสั่ง) ที่ตั้งค่าไว้ในสคริปต์จะคงอยู่ตลอดอายุของเชลล์


1
"ตั้งค่าตัวแปรเฉพาะสำหรับช่วงเวลาของสคริปต์ (.bashrc ในกรณีนี้)" นั่นเป็นเท็จ / ทำให้เข้าใจผิด ตัวแปรที่ตั้งค่าในลักษณะนี้คงอยู่ในเชลล์เชิงโต้ตอบที่อ่าน. bashrc
เอียน Kelling

PS1เป็นตัวอย่างที่ไม่ดีของตัวแปรที่จะส่งออกเป็นตัวแปรสภาพแวดล้อม มันมีความหมายต่อกระบวนการลูกที่เป็นหอยและตีความได้แตกต่างกันโดยเชลล์ที่แตกต่างกัน (เช่นทุบตีและเส้นประ) .bashrcวิธีที่ดีที่สุดคือการตั้งค่าเพียงแค่มันเป็นตัวแปรเปลือกประจำใน ตัวอย่างที่ดีขึ้นของตัวแปรสภาพแวดล้อม ได้แก่HOME, PATH, EDITORฯลฯ
แอนโธนี Geoghegan

10

ทั้งคู่ดูเหมือนจะทำงานได้ดี แต่การใช้การส่งออกจะทำให้แน่ใจว่าตัวแปรนั้นพร้อมใช้งานสำหรับ subshells และโปรแกรมอื่น ๆ ลองทดสอบดูสิ

เพิ่มสองบรรทัดเหล่านี้ลงในไฟล์. bashrc ของคุณ

TESTVAR="no export"
export MYTESTVAR="with export"

จากนั้นเปิดเปลือกใหม่

เล่นecho $TESTVARและecho $MYTESTVARจะแสดงเนื้อหาของแต่ละตัวแปร ตอนนี้ภายในเชลล์เดียวกันนั้นลบสองบรรทัดเหล่านั้นออกจากไฟล์. bashrc ของคุณแล้วรันbashเพื่อเริ่มเชลล์ย่อย

การรันecho $TESTVARจะมีเอาต์พุตว่างเปล่า แต่การรันecho $MYTESTVARจะแสดง "พร้อมการส่งออก"

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