如何停止退出脚本?

时间:2011-01-23 22:29:42

标签: shell scripting unix ksh

我有一个调用脚本G的脚本A.在内部脚本G我不能改变任何东西(没有写访问权限)。

内部脚本G:

ExitProcess ()
{

  case $1 in
    "0" ) echo "$0: Finished successfully."
          exit 0
      ;;
*)  echo "$0: Unknown return status ($1)"
      exit $1
      ;;
 esac

}

由于我将退出脚本A,如何阻止它?

脚本A:

check_status()
{

UserName="sbrk6"
MachineName="sn26"

Tstatus=`ssh -f -T ${UserName}@${MachineName} ps -ef  | grep -w "Manager 1 PR" | egrep -v "grep|less|vi|more"`
Cstatus=`ssh -f -T ${UserName}@${MachineName} ps -ef | grep -w "gt1" | egrep -v "grep|less|vi|more"`

if [ "$Tstatus" ]
then
        if [ "$Cstatus" ]
        then

                Gstatus=`ps -ef  | grep -w "Gth_Hndl" | egrep -v "grep|less|vi|more"`

                if [ -z "$Gstatus" ]
                then
                        genth_start
                fi
        fi
else

        if [ -z "$Tstatus" ]
        then
                if [ -z "$Cstatus" ]
                then

                        Gstatus=`ps -ef  | grep -w "Ghfdjdjd" | egrep -v "grep|less|vi|more"`
                        if [ "$Gstatus" ]
                        then
                                genth_stop
                        fi
                fi
        fi
fi
}


genth_start()
{
echo START

. GD1_Sh 

}


genth_stop()
{
echo STOP

. G_Sh

##This is the Script G ###

}

while :
do
        check_status
done

希望此 while 循环继续,直到我终止此脚本

2 个答案:

答案 0 :(得分:2)

如果您无法更改脚本G,那么最简单的方法是安排将其作为单独的进程运行,而不是使用.(点)命令在当前进程中运行它。

如果脚本G只能在虚线模式下使用,那么你可以编写第三个脚本,称之为脚本Z,用于运行脚本G并退出,同时脚本A继续开心(从Z报告错误)退出,然后做任何适当的事情。)

如果这也不可行,那么你可以仔细使用eval$(...),这样当包含exit语句的脚本G中的函数实际退出时,它们就会在子shell中运行而不是在你的主壳。这比单独运行脚本G更麻烦,无论是否包含脚本Z,所以我首先使用其中一种机制。

答案 1 :(得分:0)

您可以trap exit codes并调用特定功能。在这种情况下,您不希望在脚本A中的函数末尾调用exit。

您也可以在不使用退出的情况下return an integer

来自this comment.

的示例代码
function return_code_test ()
{
return 50
}