您在此处所做的工作包括second.sh
并third.sh
作为子脚本在同一过程中运行,这在Shell编程中称为“采购”。. ./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"
如果您需要其他脚本来访问原始脚本中的变量和函数,而不需要修改它们,请在子外壳中调用这些脚本。子外壳程序是单独的进程,因此exit
仅退出它们。
#! /bin/ksh
echo "prova"
(. ./second.sh)
echo "ho lanciato il secondo"
(. ./third.sh)
echo "ho lanciato il terzo"
如果您需要使用在父脚本中second.sh
和third.sh
在父脚本中定义的变量或函数,则需要继续采购它们。
该return
内置出入口仅被执行的脚本,而不是整个过程-这是包括与其他脚本之间的一些区别一个.
命令,并包括其在父脚本文本。如果源脚本仅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
在内部函数中也调用if ,我认为没有一种不麻烦的方法。一种麻烦的方法是设置出口陷阱并将代码放在此处。
#!/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
.
命令,该命令在当前shell中提供另一个文件。不涉及子外壳或子外壳。您是要执行second.sh
而third.sh
不是采购它们吗?