Lo que está haciendo aquí es incluir second.shy third.shcomo sub-scripts que se ejecutan en el mismo proceso, que se denomina "abastecimiento" en la programación de shell. . ./second.shes básicamente equivalente a incluir el texto second.shen ese punto. El exitcomando sale del proceso, no importa si lo llama en el script original o en un script de origen.
Si todo lo que quiere hacer es ejecutar los comandos second.shy third.shy ellos no tienen que acceder o modificar las variables y funciones de la escritura original, llama a estos scripts en subprocesos.
#! /bin/ksh
echo "prova"
./second.sh
echo "ho lanciato il secondo"
./third.sh
echo "ho lanciato il terzo"
Si necesita los otros scripts para acceder a las variables y funciones del script original, pero no modificarlos, llame a estos scripts en subcapas. Las subcapas son procesos separados, por lo que exitsolo sale de ellas.
#! /bin/ksh
echo "prova"
(. ./second.sh)
echo "ho lanciato il secondo"
(. ./third.sh)
echo "ho lanciato il terzo"
Si necesita utilizar variables o funciones definidas en second.shy third.shen la secuencia de comandos principal, deberá seguir obteniendo fuentes.
El returnbuiltin sale solo del script de origen y no de todo el proceso; esa es una de las pocas diferencias entre incluir otro script con el .comando e incluir su texto en el script principal. Si las secuencias de comandos de origen solo llaman exital nivel superior, en oposición a las funciones internas, entonces puede cambiar exita return. Puede hacerlo sin modificar el script utilizando un alias.
#! /bin/ksh
echo "prova"
alias exit=return
. ./second.sh
echo "ho lanciato il secondo"
. ./third.sh
unalias exit
echo "ho lanciato il terzo"
Si exittambién se llama funciones internas, no creo que haya una manera no engorrosa. Una forma engorrosa es establecer una trampa de salida y poner su código allí.
#!/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
.comando, que genera otro archivo en el shell actual. No hay un shell o subshell secundario involucrado. ¿Querías ejecutarsecond.shy enthird.shlugar de buscarlos?