คำตอบยอดนิยมแนะนำให้เพิ่ม#!/bin/bash
บรรทัดในบรรทัดแรกของสคริปต์ย่อยที่เรียก แต่แม้ว่าคุณจะเพิ่ม shebang มันจะเร็วยิ่งกว่า*ในการรันสคริปต์ใน sub-shell และดักจับเอาต์พุต:
$(source SCRIPT_NAME)
วิธีนี้จะทำงานเมื่อคุณต้องการใช้งานล่ามเดียวกัน (เช่นจากทุบตีไปจนถึงสคริปต์ทุบตีอื่น) และตรวจสอบให้แน่ใจว่าบรรทัด Shebang ของสคริปต์ย่อยนั้นไม่ได้ทำงาน
ตัวอย่างเช่น:
#!/bin/bash
SUB_SCRIPT=$(mktemp)
echo "#!/bin/bash" > $SUB_SCRIPT
echo 'echo $1' >> $SUB_SCRIPT
chmod +x $SUB_SCRIPT
if [[ $1 == "--source" ]]; then
for X in $(seq 100); do
MODE=$(source $SUB_SCRIPT "source on")
done
else
for X in $(seq 100); do
MODE=$($SUB_SCRIPT "source off")
done
fi
echo $MODE
rm $SUB_SCRIPT
เอาท์พุท:
~ ❯❯❯ time ./test.sh
source off
./test.sh 0.15s user 0.16s system 87% cpu 0.360 total
~ ❯❯❯ time ./test.sh --source
source on
./test.sh --source 0.05s user 0.06s system 95% cpu 0.114 total
*ตัวอย่างเช่นเมื่อไวรัสหรือเครื่องมือความปลอดภัยทำงานบนอุปกรณ์อาจใช้เวลาเพิ่มอีก 100 มิลลิวินาทีในการดำเนินกระบวนการใหม่