ฉันใช้ Red Hat Linux Enterprise 5 อยู่ ฉันมักจะใช้คำสั่งส่งออกเพื่อตั้งค่าตัวแปรสภาพแวดล้อม
มีวิธีอื่นในการตั้งค่าตัวแปรสภาพแวดล้อมและอะไรคือข้อดี / ข้อเสียของมัน
ฉันใช้ Red Hat Linux Enterprise 5 อยู่ ฉันมักจะใช้คำสั่งส่งออกเพื่อตั้งค่าตัวแปรสภาพแวดล้อม
มีวิธีอื่นในการตั้งค่าตัวแปรสภาพแวดล้อมและอะไรคือข้อดี / ข้อเสียของมัน
คำตอบ:
นี่เป็นข้อความที่ตัดตอนมาจากหน้า Bash man:
ส่งออก [-fn] [ชื่อ [= คำ]] ...
ส่งออก -p
ชื่อที่ให้มามีการทำเครื่องหมายสำหรับการส่งออกโดยอัตโนมัติไปยังสภาพแวดล้อมของคำสั่งดำเนินการในภายหลัง หากระบุอ็อพชัน -f ชื่อจะอ้างถึงฟังก์ชัน ...
หากคุณต้องการตัวแปรในสภาพแวดล้อมปัจจุบันไม่จำเป็นต้องใช้การส่งออก
var=value
แก้ไข:
ไม่มีการส่งออก: สภาพแวดล้อมปัจจุบันเท่านั้น ด้วยการส่งออก: สภาพแวดล้อมปัจจุบันและสภาพแวดล้อมของเด็ก
นี่คือการสาธิตผลกระทบของการส่งออกตามความพร้อมใช้งานของตัวแปรในสภาพแวดล้อมแบบลูกและการเปลี่ยนแปลงในสภาพแวดล้อมแบบลูกไม่ส่งผลกระทบต่อผู้ปกครอง:
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
หลังจากเสียงสะท้อนแรก ( echo "parent..."
) คุณเห็น "123" และ "456" เพราะทั้งคู่var1
และvar2
ทำงานในสภาพแวดล้อมปัจจุบัน คุณไม่เห็นค่าvar3
เพราะยังไม่ได้ตั้งค่า
หลังจากบรรทัดที่เริ่ม " var3=...
" คุณไม่เห็นค่าvar1
เพราะไม่ถูกส่งออก คุณทำดูค่าvar2
เพราะมันได้รับการส่งออก คุณจะเห็นความคุ้มค่าvar3
เพราะมันถูกกำหนดให้มีสภาพแวดล้อมที่เด็กเท่านั้น
( bash -c
เทียบเท่ากับการเรียกใช้สคริปต์ที่มีเนื้อหาของการโต้แย้งกับ-c
ตัวเลือกสคริปต์หรือปฏิบัติการอื่น ๆ หรือในกรณีนี้การโต้แย้งที่จะbash -c
กลายเป็นลูกของสภาพแวดล้อมในปัจจุบันซึ่งเป็นผลมาจากหลักสูตรของเด็ก ผู้ปกครอง.)
ใน "สคริปต์" ค่าของตัวแปรจะเปลี่ยนไป ตอนนี้มันจะส่งออกค่าใหม่เหล่านั้น
เมื่อ "สคริปต์" เสร็จสิ้นการดำเนินการจะกลับสู่สภาพแวดล้อมหลัก (บรรทัดคำสั่งในกรณีนี้) หลังจากเสียงสะท้อนสุดท้ายคุณจะเห็นค่าดั้งเดิมเนื่องจากการเปลี่ยนแปลงที่เกิดขึ้นในสภาพแวดล้อมย่อยไม่ส่งผลกระทบต่อผู้ปกครอง
export
- เพื่อให้ตัวแปรพร้อมใช้งานสำหรับสภาพแวดล้อมย่อยเหล่านี้
คุณพูดอย่างนั้น
ฉันมักจะใช้คำสั่งส่งออกเพื่อตั้งค่าตัวแปรสภาพแวดล้อม
ดูเหมือนว่าคุณกำลังพยายามถามว่าคุณจะทำให้ตัวแปรสภาพแวดล้อมยังคงอยู่ได้อย่างไร หากต้องการทำเช่นนั้นคุณจะต้องวางexport VAR="foo"
คำสั่งของคุณลงในไฟล์ $ HOME / .bash_profile (หากคุณใช้ bash) หากคุณต้องการตัวแปรสภาพแวดล้อมนั้นยังคงมีอยู่สำหรับผู้ใช้ทั้งหมดยกเว้นรูทให้เพิ่มไปยัง / etc / profile หากคุณต้องการเพิ่มผู้ใช้รูทด้วยให้ตั้งใน /root/.bash_profile
สิ่งนี้จะใช้ได้กับเชลล์ล็อกอินทั้งหมดโดยที่ bash เป็นเชลล์ที่เลือก สำหรับเชลล์ที่ไม่ใช่ล็อกอินคุณต้องใช้. bashrc ฉันไม่มีความเข้าใจที่จะเสนอให้กับกระสุนอื่น ๆ : D
การส่งออกเป็นวิธีที่ตรงไปตรงมาที่สุดที่จะทำดังนั้นทำไมไม่ปล่อยไว้ที่นั้น?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
FOO=BAR; executethisprogram
โปรแกรมจะไม่ทราบว่าค่าของตัวแปรexecutethisprogram
FOO
ในทางกลับกันเมื่อใช้: FOO=BAR; export FOO; executethisprogram
โปรแกรมที่จะรู้ค่าของตัวแปรexecutethisprogram
FOO
export FOO
คือคำสั่งที่ทำเครื่องหมายตัวแปรFOO
เพื่อให้สามารถเข้าถึงได้โดยกระบวนการลูกของ envrionment ที่คำสั่งถูกใช้ พาเรนต์นั้นอาจเป็นสคริปต์หรือเชลล์แบบโต้ตอบ
คุณสามารถทำสิ่งนี้:
VAR=val application
ตัวอย่างเช่น:
LANG=C ls --help
เอาต์พุตเป็นภาษาอังกฤษ
LANG=pl_PL ls --help
ผลผลิตในภาษาโปแลนด์ (ถ้ามี)
ในอดีตคุณไม่สามารถส่งออก VAL = val คุณต้อง
VAL=val; export VAL
ls
ตัวอย่างเช่น) โดยไม่มีผลต่อค่าของตัวแปรนั้นในสภาพแวดล้อมปัจจุบัน (หลัก)
ls
เป็นลูกของกระบวนการที่มันถูกเรียกใช้ หากฉันพิมพ์ls
ที่พรอมต์คำสั่งเชลล์แบบโต้ตอบจะเป็นพาเรนต์และls
เป็นลูก ถ้าฉันมีสคริปต์ที่ใช้ls
สคริปต์ก็คือพาเรนต์และls
เป็นลูก