tl; dr script=$(readlink -e -- "${BASH_SOURCE}")
(สำหรับ bashชัด ๆ )
$BASH_SOURCE
กรณีทดสอบ
ไฟล์ที่กำหนด /tmp/source1.sh
echo '$BASH_SOURCE '"(${BASH_SOURCE})"
echo 'readlink -e $BASH_SOURCE'\
"($(readlink -e -- "${BASH_SOURCE}"))"
source
ไฟล์ในลักษณะที่แตกต่าง
source
จาก /tmp
$> cd /tmp
$> source source1.sh
$BASH_SOURCE (source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
$> source ./source1.sh
$BASH_SOURCE (./source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
$> source /tmp/source1.sh
$BASH_SOURCE (/tmp/source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
source
จาก /
cd /
$> source /tmp/source1.sh
$0 (bash)
$BASH_SOURCE (/tmp/source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
source
จากเส้นทางญาติที่แตกต่างกัน/tmp/a
และ/var
$> cd /tmp/a
$> source ../source1.sh
$BASH_SOURCE (../source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
$> cd /var
$> source ../tmp/source1.sh
$BASH_SOURCE (../tmp/source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
เกี่ยวกับ $0
ในทุกกรณีหากสคริปต์มีคำสั่งเพิ่ม
echo '$0 '"(${0})"
จากนั้นsource
สคริปต์จะพิมพ์ออกมาเสมอ
$0 (bash)
อย่างไรก็ตามหากสคริปต์ทำงานเช่น
$> bash /tmp/source1.sh
จากนั้นจะเป็นค่าสตริง$0
/tmp/source1.sh
$0 (/tmp/source1.sh)
$BASH_SOURCE (/tmp/source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)