ฉันใช้สคริปต์ (ซึ่งฉันไม่มีสิทธิ์ในการเขียน) ซึ่งสร้างนามแฝงมากมายเพื่อตั้งค่าสภาพแวดล้อม ฉันต้องการสร้างฟังก์ชั่นทุบตีเพื่อตั้งค่าสภาพแวดล้อมของฉัน แต่ดูเหมือนว่านามแฝงจะไม่รอดจากการทำงานของร่างกาย
นี่คือตัวอย่างเล็กน้อย:
# aliases.sh
alias fooAlias='echo "this will never work!"'
.
# .bashrc
function setupLotsOfThings() {
source aliases.sh
fooAlias
}
.
ตอนนี้ถ้าฉันเพียงแค่aliases.sh
โต้ตอบแหล่งที่มาสิ่งที่ทำงานตามที่คาดไว้:
[mycomputer]~/ $ source aliases.sh
[mycomputer]~/ $ fooAlias
this will never work!
อย่างไรก็ตามถ้าฉันเรียกฟังก์ชันที่กำหนดใน. bashrc ของฉันแทนมันจะไม่รู้จักนามแฝงหลังจากหาคำจำกัดความของมัน:
[mycomputer]~/ $ setupLotsOfThings
-bash: fooAlias: command not found
เกิดขึ้นที่นี่คืออะไร? มีบางสิ่งที่ฉันขาดหายไปเกี่ยวกับขอบเขตของalias
คำสั่งเมื่อใช้ในฟังก์ชันหรือไม่?
แก้ไข:ฉันจะเพิ่มรายละเอียดนอกเหนือจากตัวอย่างเล็ก ๆ น้อย ๆ เพื่อส่องแสงสิ่งที่ฉันพยายามทำให้สำเร็จ
สำหรับงานของฉันฉันพัฒนาและใช้งานซอฟต์แวร์จำนวนมากในคลัสเตอร์และ / หรือตาราง ฉันมีหลายโครงการที่ต้องการสภาพแวดล้อมที่แตกต่างกันโดยสิ้นเชิงเช่นรุ่น gcc ที่แตกต่างกันการเปิดตัวซอฟต์แวร์เฉพาะการกำหนดค่าและเส้นทางข้อมูลและตัวแปรสภาพแวดล้อมต่างๆ ผู้ดูแลระบบจัดเตรียมสคริปต์เพื่อตั้งค่าสิ่งต่าง ๆ โดยปกติจะกำหนดฟังก์ชันเปลือกหรือนามแฝงซึ่งเรียกใช้ฟังก์ชันหรือนามแฝงอื่น ๆ หรือเรียกใช้สคริปต์ต่าง ๆ สำหรับฉันมันเป็นกล่องดำ
ฉันต้องการตั้งค่าสภาพแวดล้อมต่าง ๆ ของฉันเองด้วยคำสั่งเดียว ขณะนี้ฉันทำสิ่งที่ชอบ:
[mycomputer]~/ $ source /some/environment/setup/script.sh
[mycomputer]~/ $ aliasToSetupSomeSoftwareVersion #this was defined in the above
[mycomputer]~/ $ anotherAliasForOtherSoftware
[mycomputer]~/ $ source /maybe/theres/another/script.sh
[mycomputer]~/ $ runSomeOtherSetup # this was defined in the new script
โดยทั่วไปคำสั่งเหล่านี้จะต้องทำงานตามลำดับ โดยพื้นฐานแล้วความคิดของฉันคือการคัดลอกบรรทัดด้านบนลงในบล็อกฟังก์ชัน แต่ตามตัวอย่างดั้งเดิมแสดงให้เห็นว่ามันไม่ได้ผล การแก้ปัญหาทางเลือกเป็นมากกว่าการต้อนรับ!