我有两个 shell 脚本abc.sh
和def.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