Apa yang Anda lakukan di sini termasuk second.sh
dan third.sh
sebagai sub-skrip yang berjalan dalam proses yang sama, yang disebut "sumber" dalam pemrograman shell. . ./second.sh
pada dasarnya setara dengan memasukkan teks second.sh
pada saat itu. The exit
perintah keluar proses, tidak peduli apakah Anda menyebutnya dalam naskah asli atau naskah bersumber.
Jika semua yang ingin Anda lakukan adalah menjalankan perintah second.sh
dan third.sh
dan mereka tidak perlu mengakses atau memodifikasi variabel dan fungsi dari skrip asli, panggil skrip ini sebagai proses anak.
#! /bin/ksh
echo "prova"
./second.sh
echo "ho lanciato il secondo"
./third.sh
echo "ho lanciato il terzo"
Jika Anda memerlukan skrip lain untuk mengakses variabel dan fungsi dari skrip asli, tetapi tidak memodifikasinya, panggil skrip ini dalam subkulit. Subshell adalah proses yang terpisah, jadi exit
keluar hanya mereka.
#! /bin/ksh
echo "prova"
(. ./second.sh)
echo "ho lanciato il secondo"
(. ./third.sh)
echo "ho lanciato il terzo"
Jika Anda perlu menggunakan variabel atau fungsi yang didefinisikan dalam second.sh
dan third.sh
di skrip induk, maka Anda harus terus sumbernya.
The return
builtin keluar hanya script bersumber dan tidak seluruh proses - itu salah satu dari beberapa perbedaan antara termasuk script lain dengan .
perintah dan termasuk teks dalam naskah tua. Jika skrip bersumber hanya memanggil exit
di tingkat atas, yang bertentangan dengan fungsi di dalam, maka Anda dapat mengubahnya exit
menjadi return
. Anda dapat melakukannya tanpa memodifikasi skrip dengan menggunakan alias.
#! /bin/ksh
echo "prova"
alias exit=return
. ./second.sh
echo "ho lanciato il secondo"
. ./third.sh
unalias exit
echo "ho lanciato il terzo"
Jika exit
juga disebut fungsi di dalam, saya tidak berpikir ada cara yang tidak rumit. Cara rumit adalah dengan mengatur jebakan keluar dan menempatkan kode Anda di sana.
#!/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
.
perintah, yang sumber file lain di shell saat ini. Tidak ada shell anak atau subkulit yang terlibat. Apakah Anda bermaksud mengeksekusisecond.sh
danthird.sh
bukannya mengambilnya?