สิ่งที่คุณทำที่นี่รวมถึงsecond.sh
และthird.sh
เป็นสคริปต์ย่อยที่ทำงานในกระบวนการเดียวกันซึ่งเรียกว่า "การจัดหา" ในการเขียนโปรแกรมเชลล์ . ./second.sh
โดยทั่วไปเทียบเท่ากับการรวมข้อความของsecond.sh
ณ จุดนั้น exit
คำสั่งออกจากกระบวนการที่มันไม่สำคัญว่าคุณจะเรียกมันว่าในสคริปต์เดิมหรือในสคริปต์ที่มา
หากสิ่งที่คุณต้องการจะทำคือเรียกใช้คำสั่งในsecond.sh
และthird.sh
และพวกเขาไม่จำเป็นต้องเข้าถึงหรือการปรับเปลี่ยนตัวแปรและฟังก์ชั่นจากสคริปต์เดิมเรียกสคริปต์เหล่านี้เป็นกระบวนการที่เด็ก
#! /bin/ksh
echo "prova"
./second.sh
echo "ho lanciato il secondo"
./third.sh
echo "ho lanciato il terzo"
หากคุณต้องการสคริปต์อื่น ๆ เพื่อเข้าถึงตัวแปรและฟังก์ชั่นจากสคริปต์ต้นฉบับ แต่ไม่ต้องแก้ไขให้เรียกสคริปต์เหล่านี้ใน subshells Subshells เป็นกระบวนการที่แยกกันดังนั้นexit
ออกจากพวกเขาเท่านั้น
#! /bin/ksh
echo "prova"
(. ./second.sh)
echo "ho lanciato il secondo"
(. ./third.sh)
echo "ho lanciato il terzo"
หากคุณต้องการใช้ตัวแปรหรือฟังก์ชั่นที่กำหนดไว้ในsecond.sh
และthird.sh
ในสคริปต์หลักแล้วคุณจะต้องจัดหาพวกเขา
return
builtin ทางออกเพียงสคริปต์ที่มาและไม่ได้เป็นกระบวนการทั้งหมด - ที่หนึ่งของความแตกต่างระหว่างไม่กี่รวมทั้งสคริปต์อื่นที่มี.
คำสั่งและรวมถึงข้อความในสคริปต์แม่ ถ้าสคริปต์มาเพียงโทรexit
ที่ระดับบนสุดเมื่อเทียบกับการทำงานภายในแล้วคุณสามารถเปลี่ยนเข้าexit
return
คุณสามารถทำได้โดยไม่ต้องแก้ไขสคริปต์โดยใช้นามแฝง
#! /bin/ksh
echo "prova"
alias exit=return
. ./second.sh
echo "ho lanciato il secondo"
. ./third.sh
unalias exit
echo "ho lanciato il terzo"
ถ้าexit
เรียกอีกอย่างว่าฟังก์ชั่นภายในฉันไม่คิดว่าจะมีวิธีที่ไม่ยุ่งยาก วิธีที่ยุ่งยากคือตั้งค่ากับดักทางออกและวางรหัสของคุณไว้ที่นั่น
#!/bin/ksh
do_first () {
echo "prova"
trap "after_second" EXIT
. ./second.sh
after_second
}
after_second () {
echo "ho lanciato il secondo"
trap "after_third" EXIT
. ./third.sh
after_third
}
after_third () {
trap - EXIT
echo "ho lanciato il terzo"
}
do_first
.
คำสั่งซึ่งแหล่งไฟล์อื่นในเปลือกปัจจุบัน ไม่มีเชลล์ย่อยหรือเชลล์ย่อยที่เกี่ยวข้อง คุณหมายถึงดำเนินการsecond.sh
และthird.sh
แทนที่จะจัดหามาหรือไม่