แต่ละกระบวนการมีคุณสมบัติหลายอย่างที่กระบวนการสามารถตั้งค่าเป็นรายบุคคลและเป็นอิสระจากกระบวนการอื่น ๆ ตัวอย่างคือข้อ จำกัด ทรัพยากร umask ไดเรกทอรีปัจจุบันตัวแปรสภาพแวดล้อมและอื่น ๆ เมื่อสร้างโปรเซส (ผ่านการfork()
เรียกของระบบ) เด็กจะรับค่าคุณสมบัติเหล่านี้จากพาเรนต์ หลังจากนี้กระบวนการลูกอาจตั้งค่าคุณลักษณะเหล่านี้โดยพลการ (มีข้อ จำกัด บางประการกระบวนการอาจไม่เพิ่มขีด จำกัด ของทรัพยากรอย่างหนักหรือเปลี่ยนไดเรกทอรีปัจจุบันเป็นไดเรกทอรีที่ไม่มีสิทธิ์ดำเนินการ)
มีเพียงไม่กี่โปรแกรมเท่านั้นที่ปรับเปลี่ยนตัวแปรสภาพแวดล้อมซึ่งส่วนใหญ่ไม่ได้รบกวน สมมติว่ากรณีหลัง ดังนั้นหากกระบวนการลูกสร้างตัวเด็กเพิ่มขึ้นกระบวนการเหล่านี้จะมีตัวแปรสภาพแวดล้อมเช่นเดียวกับปู่ย่าตายาย และอื่น ๆ
ตอนนี้เชลล์มีตัวแปรมากมายที่สามารถดูได้set
(ในเชลล์ของ Bourne Shell type, ไม่ทราบเกี่ยวกับ C เชลล์) ตัวแปรเหล่านี้ไม่ใช่ตัวแปรสภาพแวดล้อมยกเว้นว่าเป็นexport
ed env
ตัวแปรสภาพแวดล้อมที่สามารถดูได้ด้วย หากคุณเรียกใช้โปรแกรมจากบรรทัดคำสั่งเชลล์โปรแกรมจะสืบทอดตัวแปรสภาพแวดล้อมจากเชลล์ เช่นเดียวกันสำหรับโปรแกรมที่เรียกใช้จากเชลล์สคริปต์
ดังนั้นเมื่อเข้าสู่ระบบจะมีเชลล์ที่อ่านข้อมูลโปรไฟล์ (เช่น~/.profile
) และสืบทอดให้กับเด็ก ๆ ทุกคนหลานและอื่น ๆ นี่คือวิธีที่การตั้งค่าตัวแปรสภาพแวดล้อมลดลงจากเชลล์ล็อกอินหรือสคริปต์ล็อกอินไปยังโปรแกรมอื่น ๆ ทั้งหมดที่เปิดตัวภายในเซสชันการเข้าสู่ระบบ
ฉันสร้างตัวแปรสภาพแวดล้อมในหน้าต่างเทอร์มินัลหนึ่งและพยายามที่จะสะท้อนในหน้าต่างเทอร์มินัลอื่น ที่แสดงอะไร
จากคำอธิบายข้างต้นนี่คือผลลัพธ์ที่คาดหวัง การเปลี่ยนแปลงสภาพแวดล้อมของกระบวนการส่งผลกระทบต่อลูก ๆ ของกระบวนการนี้ที่สร้างขึ้นนับจากนี้ไปไม่ใช่กระบวนการที่มีอยู่
$TEST=hello
สิ่งนี้ไม่น่าจะทำงานได้เว้นแต่ว่าการขยายตัวของตัวแปรจะถูกปิดใช้งานหรือ$TEST
มีค่าที่เหมาะสมอยู่แล้ว หากคุณต้องการกำหนดให้hello
กับตัวแปรTEST
คุณต้องพูดTEST=hello
(หมายเหตุ: ไม่$
)
หลังจากนั้นฉันส่งออกและลองอีกครั้งecho
ในหน้าต่างเทอร์มินัลอื่น ผลลัพธ์เหมือนเดิม
นี่เป็นผลลัพธ์ที่คาดหวังอีกครั้ง
แต่ถ้าฉันรันรหัสเดียวกันที่~/.profile
ตัวแปรล็อกอิน (ต่อท้ายรหัสไปยังไฟล์) สามารถใช้หน้าต่างเทอร์มินัลใดก็ได้
นี่เป็นเพราะเชลล์ในเทอร์มินัลเป็นผู้สืบทอดของเชลล์ที่อ่านการตั้งค่าสภาพแวดล้อมจาก~/.profile
นั้นจึงสืบทอดการตั้งค่าเหล่านี้