linux shell脚本:while循环中调用另一个脚本遇到exit为什么会跳出循环,且继续执行循环后的程序? 5

这里给出了for和while两种循环,及两种不同的结果:#for循环如下,a.sh中for循环内调用b.sh,如下:#a.sh如下:#!/bin/sh-xforiin$(... 这里给出了for和while两种循环,及两种不同的结果:

#for循环如下,a.sh中for循环内调用b.sh,如下:

#a.sh如下:
#! /bin/sh -x
for i in $(seq 10)
do
echo "loop $i"
source b.sh
done
echo "end loop $i"

#b.sh如下
#! /bin/sh -x
echo "b.sh is process"
exit 1

#结果如下:
loop 1
b.sh is process

#while循环如下,a.sh中while循环内调用b.sh,其中all_file.txt中有大量文件目录

#a.sh如下:
#! /bin/sh
cat all_file.txt | while read line_a
do
echo "loop $i"
. b.sh
done
echo "end loop"

#b.sh如下

#! /bin/sh -x
echo "b.sh is process"
exit 1

结果如下:
loop
b.sh is process
end loop

问题:for直接跳出整个脚本,和baidu里搜的exit解答一样;
但是while循环只是跳出循环,继续执行循环后的程序。
请大神给出答案。
对b.sh中的exit改成#exit后可以继续循环;
能否给出不改动b.sh,还能循环。
展开
 我来答
创作者slkjd
2017-06-20 · 超过18用户采纳过TA的回答
知道答主
回答量:74
采纳率:100%
帮助的人:9.6万
展开全部
exit是在被调用的脚本里面,肯定会退出被调用的脚本了。如果不想继续执行while循环后面的程序可以在do后面的条件上加上break
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
良玉小帝
2015-07-21 · 个人日常精心汇总合集
良玉小帝
采纳数:5925 获赞数:9451

向TA提问 私信TA
展开全部
[root@localhost ~]# cat a.sh 
#! /bin/sh
while true
do
  echo "loop "
  #source ./b.sh
        exit 1
  #. ./b.sh
done
echo "end loop"
[root@localhost ~]# sh -x a.sh
+ true
+ echo 'loop '
loop 
+ exit 1

可以看出while也是可以exit的

不是while的错,是read的问题,exit 1是给了read,read读取不到东西结束循环。。。所以还会继续执行while后面的echo

更多追问追答
追问
那请问,有办法不修改b.sh中的文件内容,还能继续循环么?
追答
没懂你的意思,我解释的是
cat all_file.txt | while read line_a


while true
对于exit 1系统做出的处理。。
和修改b.sh又是什么???
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
At_dou
2020-08-04
知道答主
回答量:1
采纳率:0%
帮助的人:591
展开全部
是source与.(点)的区别,把a.sh里的source b.sh改成./b.sh(b.sh的完整路径)就有了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式