วิธีการ 'source' เชลล์สคริปต์โดยใช้ bash จาก zsh


14

ฉันใช้ zsh และชอบมันมาก แต่ทำงานได้มากกับแหล่ง Android ที่มีสคริปต์การคอมไพล์ที่ต้องการประเมินค่า bash อย่างถูกต้อง สคริปต์เหล่านี้จำเป็นต้องมีแหล่งที่มาก่อนการรวบรวมและกำหนดตัวแปรสภาพแวดล้อมและฟังก์ชั่นเชลล์ที่ใช้ในระหว่างการรวบรวม

Zsh ไม่สามารถหาแหล่งไฟล์เหล่านี้ได้และหากฉันพยายามที่จะออกemulate bashเชลล์ของฉันกลายเป็นฟังก์ชั่นที่ไม่ทำงานพร้อมข้อผิดพลาดมากมายทุกครั้งที่ฉันกด Space (ฉันใช้ oh-my-zsh อาจเป็นสาเหตุได้หรือไม่):

url-quote-magic:24: bad pattern: ( ):/(|/localhost)/*

มีวิธีใดที่ฉันจะไม่เปลี่ยนเป็น bash เพื่อประเมินไฟล์เหล่านี้หรือเรียกใช้งาน bash instance และนำเข้าตัวแปร / ฟังก์ชั่นสภาพแวดล้อมใหม่ที่กำหนดไว้ในระหว่างการจัดหาเข้าสู่เซสชัน zsh ของฉัน หรือฉันถูกกำหนดให้เปลี่ยนเป็น bash ทุกครั้งที่ฉันต้องทำงานกับ Android?

แก้ไข : พบคำตอบสำหรับคำถามของฉันเอง ดูเหมือนว่าการจัดหาไฟล์โดยใช้เชลล์ตัวอื่นจะไม่สามารถทำได้ แต่ในกรณีที่ไฟล์มาโคร Android ล้มเหลวหน้านี้จะนำการแก้ไข:

http://nilvec.com/building-cyanogen-from-source/

โดยพื้นฐานแล้วการตั้งค่าอย่างง่ายunsetopt nomatchจะขอให้ zsh หยุดการบ่นเกี่ยวกับ wildcard ที่ไม่ตรงกันซึ่งเพียงพอที่จะทำให้สคริปต์ดำเนินการให้เสร็จสิ้น ยังคงมีข้อผิดพลาดอีกข้อหนึ่งเกี่ยวกับการใช้completeคำสั่ง bash ภายในเพื่อเพิ่มความสามารถในการเติมเต็มให้กับมาโคร Android หนึ่งตัว แต่มันไม่สำคัญอย่างยิ่งที่นี่

คำตอบ:


4

คุณสามารถใส่ commandline การคอมไพล์ของคุณใน bash script ซึ่งจะรวบรวมสคริปต์การคอมไพล์ก่อนที่จะรันคำสั่งการคอมไพล์

สิ่งที่ต้องการ

    #!/bin/bash
    . /path/to/environmentscript
    . /path/to/morefunctionsscript

    compile_command

จากนั้นแทนที่จะเรียกใช้compile_commandด้วยมือคุณเพียงแค่เรียกใช้สคริปต์ทุบตีใหม่ของคุณ


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