退出 shell 脚本

退出 shell 脚本

我有两个 shell 脚本abc.shdef.sh.在其中abc.sh执行并通过 return 语句def.sh返回控制权。abc.sh

我有一个 echo 命令,后跟一个 exit 命令,但显然不起作用。

下面您将看到以下内容abc.sh

sleep 60;
bash ./gen_files/def.sh ./gen_files/regress_rpt_1_0.txt
sleep 60;
bash ./gen_files/def.sh ./gen_files/regress_rpt_1_1.txt
sleep 10;
echo "COMPLETED **** EXITING NOW ****";
exit 0;

请找到def.sh的内容

#!/bin/bash

function build_status()
              {
                FILE=$1
                if test -f "$FILE"; then
                  echo "$FILE File Exists"
                  if `grep -q "Build Job" $FILE`;then
                    echo "Build found,Continuing to next launch statement"
                    return
                  else
                    echo "Build Not Found,Waiting for the build"
                    sleep 120
                    build_status $FILE
                  fi
                else
                  echo "$FILE Not Found"
                  #build_status $FILE
                fi
              }
            FILE=$1
            build_status $FILE

我希望脚本在打印后退出COMPLETED **** EXITING NOW ****并返回终端。然而我现在看到的是脚本不会自行退出。我可以看到终端中的打印,并且 shell 脚本仍在运行,没有任何活动

答案1

abc.sh作为后台作业运行。这意味着当脚本在后台运行时,脚本(以及脚本)的输出def.sh将被打印到终端。abc.sh

当脚本完成后,它将终止。

事实上,您在后台运行脚本并将其输出到终端,这意味着它将覆盖 shell 在启动脚本后立即打印的提示。在您按 之前,shell 不会输出新的提示符Enter

解决方案是将脚本的输出写入日志文件,

./abc.sh >abc.log 2>&1 &

(这会写入输出和错误,abc.log如果不存在,则将创建这些输出和错误,如果存在,则将其清空)或者,只是不在后台运行脚本,

./abc.sh

相关内容