ฉันมีไฟล์ bash src-useful.bashซึ่งมีฟังก์ชั่นที่มีประโยชน์เช่นsay_hello()ตั้งอยู่ใน / path / to / มีประโยชน์
ในฉัน~/.bash_profileฉันเพิ่มบรรทัดต่อไปนี้:
export BASH_USEFUL=/path/to/useful
source $BASH_USEFUL/src-useful.bash
การเปิดเทอร์มินัลใหม่ฉันสามารถตรวจสอบสิ่งต่อไปนี้:
$ echo $BASH_USEFUL
/path/to/useful
$ cat $BASH_USEFUL/src-useful.bash
function hello() {
echo "hello!"
}
$ hello
hello!
ฉันสร้างสคริปต์say_hello.sh:
$ cat say_hello.sh
echo "BASH_USEFUL: $BASH_USEFUL"
hello
$ ./say_hello.sh
BASH_USEFUL: /path/to/useful # Recognizsed
say_hello.sh: line 2: say_hello: command not found # Not recognized?
หากฉันแหล่งที่มา$BASH_USEFUL/src-useful.bashในsay_hello.shมันจะทำงานอย่างไร:
$ cat say_hello.sh
echo "BASH_USEFUL: $BASH_USEFUL"
source $BASH_USEFUL/src-useful
say_hello
$ ./say_hello.sh
BASH_USEFUL: /path/to/useful # Recognized
hello! # Function say_hello is now recognized
ฉันต้องการทราบว่าทำไมBASH_USEFULสคริปต์ยังคงรับรู้ถึงตัวแปรในขณะที่สคริปต์ที่ทำงานของฉันไม่สามารถมองเห็นฟังก์ชั่นจากไฟล์ที่มาของฉันในสภาพแวดล้อมได้ มีวิธีแก้ปัญหานอกเหนือจากการหาsrc-useful.bashสคริปต์ของฉันหรือไม่? ฉันต้องการsrc-useful.bashโหลดฟังก์ชั่นในสภาพแวดล้อมของสคริปต์ที่ฉันเปิดตัว
hello()การsay_hello()ในขั้นตอนข้างต้น ...