Burada yaptığınız , aynı süreçte çalışan ve kabuk programlamasında “kaynak bulma” olarak adlandırılan alt komut dosyaları olarak second.shve bunu içerir third.sh. . ./second.shtemel olarak second.sh, o noktadaki metnin dahil edilmesine eşdeğerdir . exitKomut bir önemi orijinal komut dosyası veya bir kaynaklı senaryoya diyoruz olmadığını değil, süreç çıkar.
Yapmak istediğiniz tüm komutları çalıştırılırsa second.shve third.shonlar çocuk süreçler olarak bu komut dosyalarını çağırmak, erişmeniz gereken veya orijinal komut değişkenleri ve işlevleri değişiklik yapmayın.
#! /bin/ksh
echo "prova"
./second.sh
echo "ho lanciato il secondo"
./third.sh
echo "ho lanciato il terzo"
Değişkenlere ve işlevlere orijinal komut dosyasından erişmek, ancak bunları değiştirmek için diğer komut dosyalarına ihtiyacınız varsa, bu komut dosyalarını alt kabuklarda çağırın. Alt kabuklar ayrı süreçlerdir, bu nedenle exityalnızca bunlardan çıkar.
#! /bin/ksh
echo "prova"
(. ./second.sh)
echo "ho lanciato il secondo"
(. ./third.sh)
echo "ho lanciato il terzo"
Eğer tanımlanan değişkenleri veya işlevleri kullanmanız gerekiyorsa second.shve third.shebeveyn komut, o zaman bunları kaynak tutmak gerekir.
returnYerleşik çıkışları sadece kaynaklı senaryo değil, tüm süreç - başka senaryo da dahil arasındaki bazı farklılıklar biri .komuta ve ana komut metnini içeren. Kaynaklı komut dosyaları exit, iç işlevlerin aksine, yalnızca üst düzeyden çağırıyorsa , exitiçine geçebilirsiniz return. Bunu, bir takma ad kullanarak komut dosyasını değiştirmeden yapabilirsiniz.
#! /bin/ksh
echo "prova"
alias exit=return
. ./second.sh
echo "ho lanciato il secondo"
. ./third.sh
unalias exit
echo "ho lanciato il terzo"
Eğer exitaynı zamanda fonksiyonları içine denir, ben olmayan bir hantal bir yolu vardır sanmıyorum. Hantal bir yol, bir çıkış tuzağı ayarlamak ve kodunuzu oraya koymaktır.
#!/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
., geçerli kabukta başka bir dosyaya kaynak sağlayan komutu kullanıyorsunuz . Alt kabuk veya alt kabuk dahil değildir. Bunları yürütmeksecond.shvethird.shkaynak yapmak yerine mi demek istediniz ?