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.sh
ve bunu içerir third.sh
. . ./second.sh
temel olarak second.sh
, o noktadaki metnin dahil edilmesine eşdeğerdir . exit
Komut 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.sh
ve third.sh
onlar ç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 exit
yalnı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.sh
ve third.sh
ebeveyn komut, o zaman bunları kaynak tutmak gerekir.
return
Yerleş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 , exit
iç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 exit
aynı 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.sh
vethird.sh
kaynak yapmak yerine mi demek istediniz ?