ดูเหมือนว่าการเรียกง่าย ๆ ของเชลล์ในระบบของคุณจะไม่ได้รับสืบทอดนามแฝง (หรือฟังก์ชั่น) ที่มีการกำหนดไว้module
ดังนั้นเชลล์ไม่สามารถค้นหาได้ (ดูด้านล่างของบันทึกด้วยข้อความที่ตัดตอนมา) ลองtype module
จากพรอมต์เพื่อดูว่าmodule
มีการกำหนดไว้อย่างไร
ที่สำคัญคือมีแหล่งที่มาถ้าคุณเขียนแต่ละบรรทัดของสคริปต์จากแป้นพิมพ์
โปรดสังเกตว่าในอีกด้านหนึ่งคุณกำลังสืบทอดประวัติเฉพาะทั้งหมดของเชลล์ปัจจุบัน แต่ในอีกด้านหนึ่งเชลล์ปัจจุบันจะอยู่ภายใต้ผลกระทบทุกด้านของสคริปต์และmodule
การเรียกใช้ของคุณ
เกี่ยวกับความแตกต่างระหว่างการจัดทำสคริปต์และดำเนินการคุณสามารถอ่านได้ใน SuperUser Sep 2009หรือDec 2009 , Ubuntu Feb 2011 , Unix Aug 2011 , Stackoverflow Dec 2012หรือในที่อื่น ๆ
ในเรื่องนี้ในส่วนโมดูลไฟล์ มีคำเตือน :
... ตัวแปรสภาพแวดล้อมไม่ได้รับการตั้งค่าเมื่อยกเลิกการโหลด modulefile ดังนั้นจึงเป็นไปได้ที่จะโหลด modulefile แล้วยกเลิกการโหลดโดยไม่ให้ตัวแปรสภาพแวดล้อมกลับสู่สถานะก่อนหน้า
ดังนั้นดูเหมือนว่าฉลาดมากขึ้นในการดำเนินการในสคริปต์
เพื่อให้สำเร็จหลังฉันสามารถคิด:
หากต้องการใช้เชลล์แบบโต้ตอบให้เพิกเฉยประวัติเฉพาะของเชลล์ปัจจุบันโดยปรับเปลี่ยนShebangของสคริปต์ด้วย
#!/bin/bash -i
เชลล์แบบโต้ตอบอ่านคำสั่งจากอินพุตของผู้ใช้บน tty เหนือสิ่งอื่นใดเช่นเชลล์อ่านไฟล์เริ่มต้นเมื่อเปิดใช้งานแสดงพรอมต์และเปิดใช้งานการควบคุมงานโดยค่าเริ่มต้น ...
หากคุณต้องการสืบทอดเรื่องราวเฉพาะของเชลล์ปัจจุบันแทนคุณสามารถลองแหล่งที่มามัน ... แต่ในเชลล์ย่อย
( source runit.sh )
ลองค้นหานามแฝง / ฟังก์ชั่นปัจจุบันmodule
ด้วยtype module
แล้วแก้ไขตามด้วยสคริปต์ของคุณ หมายเหตุตัวแปรสภาพแวดล้อมบางตัวไม่สามารถตั้งค่าmodule
ได้ ถ้าคุณต้องการคุณสามารถค้นหาเริ่มต้นสคริปต์ในไดเรกทอรี
$MODULESHOME/init/<shell>
ความคิดเห็น
ตามที่จำได้ในคำถาม & คำตอบของโมดูล
กระบวนการลูก (สคริปต์) ไม่สามารถเปลี่ยนสภาพแวดล้อมกระบวนการหลัก การโหลดโมดูลในสคริปต์มีผลกับสภาพแวดล้อมของสคริปต์เท่านั้น วิธีเดียวที่คุณสามารถเปลี่ยนสคริปต์สภาพแวดล้อมปัจจุบันคือแหล่งสคริปต์ซึ่งอ่านมันในกระบวนการปัจจุบัน
ดังนั้นหากคุณต้องการหลีกเลี่ยงการปรับเปลี่ยนสภาพแวดล้อมปัจจุบันฉันคิดว่ามันเป็นการดีกว่าที่จะพยายามเปลี่ยนshebang (1) หรือแหล่งสคริปต์ใน subshell (2) ฉันไม่แน่ใจเกี่ยวกับการใช้งานของกรณี (3)
หมายเหตุ
ข้อความที่ตัดตอนมาจากหน้าคู่มือและหน้ารายละเอียดของโมดูล
module
เป็นส่วนต่อประสานผู้ใช้กับแพ็คเกจ Modules module
นามแฝงหรือฟังก์ชั่นรันmodulecmd
โปรแกรมและมีเปลือกประเมินออกคำสั่งของ อาร์กิวเมนต์แรกที่modulecmd
ระบุชนิดของเชลล์
แพ็กเกจ Modules และmodule
คำสั่งถูกเตรียมข้อมูลเบื้องต้นเมื่อสคริปต์การกำหนดค่าเริ่มต้นเฉพาะเชลล์มีที่มาในเชลล์ สคริปต์สร้างคำสั่งโมดูลไม่ว่าจะเป็น alias หรือฟังก์ชัน shell สร้างตัวแปรสภาวะแวดล้อม Modules