贝壳。如何退出当前脚本并返回调用它的父脚本?

时间:2013-10-24 00:12:12

标签: shell

例如,A.sh在源代码中调用B.sh。该呼叫如A.sh

中所述
#Inside A.sh    
. ./B.sh

现在,if..else发生了一些B.sh声明,并决定停止执行B.sh。如何让它回到A.sh并继续执行其余的代码?

感谢。

3 个答案:

答案 0 :(得分:1)

.基本上意味着在当前shell中运行此文件。这意味着任何exit或类似的将退出当前的(A)shell。

您需要确保B在不同的shell中完成。

我还没有测试过,但是( . ./B.sh )可能有用......

正如其他人所说,您可以更多地简化事件:./B.sh也可能有用。

答案 1 :(得分:1)

您可能已经注意到,如果您从源文件中调用exit,则退出整个shell,而不仅仅是该文件。

相反,您可以使用return,它(除了从函数返回之外)将按照.命令将控制权返回给命令。

请注意,来自执行的脚本的return是错误的,而不是来源的,因此请确保仅在函数外部使用return在一个将被采购的文件中。

答案 2 :(得分:-1)

foo.sh:

#!/bin/bash

echo "hi"
./bar.sh
echo "done"

bar.sh:

#!/bin/bash

echo "bar here!"
[[ "1" == "1" ]] && exit 0
echo "oh no!"

运行foo.sh:

$ ./foo.sh
hi
bar here!
done