Zefram ตอบคำถามที่คล้ายกันในรายชื่อผู้รับจดหมาย zsh กว่า 20 ปีที่ผ่านมา :
การแก้ปัญหาคือการใช้ฟังก์ชั่น - เรียกมันว่าsource_bash
- ไปยังแหล่งที่คุณสคริปต์ทุบตี:
function source_bash {
emulate -L bash
builtin source "$@"
}
เคล็ดลับคือตัวเลือกlocaloptions
(ตั้งค่าโดย-L
พารามิเตอร์ของการโทรเลียนแบบ) ซึ่งอธิบายไว้ในหน้า man:
LOCAL_OPTIONSหากตั้งค่าตัวเลือกนี้ ณ จุดส่งคืนจากฟังก์ชันเชลล์ตัวเลือกส่วนใหญ่ (รวมถึงตัวเลือกนี้) ซึ่งมีผลบังคับใช้เมื่อเข้าสู่ฟังก์ชันจะถูกกู้คืน ตัวเลือกที่ไม่ได้รับการกู้คืนจะได้รับสิทธิ์และข้อ จำกัด มิฉะนั้นจะมีเพียงตัวเลือกนี้เท่านั้นและตัวเลือก LOCAL_LOOPS, XTRACE และ PRINT_EXIT_VALUE จะถูกกู้คืน ดังนั้นหากสิ่งนี้ไม่มีการตั้งค่าอย่างชัดเจนโดยฟังก์ชั่นเชลล์ตัวเลือกอื่น ๆ ที่มีผลบังคับใช้ ณ จุดส่งคืนจะยังคงเป็นเช่นนั้น ฟังก์ชั่นเชลล์ยังสามารถรับประกันตัวเองว่ารู้จักการกำหนดค่าเชลล์ด้วยสูตรเช่น `emulate -L zsh '; -L เปิดใช้งาน LOCAL_OPTIONS
นำฟังก์ชั่นนี้ไปใช้กับคุณ~/.zshrc
และคุณจะต้องทำ
$ source_bash setupscipt.bash
เมื่อจำเป็น.