2012-09-04 36 views
3

下面是bash脚本退出并不在bash

#!/bin/bash 
set -x 
function doSomething() { 
    callee 
    echo "It should not go to here!" 
} 

function callee() { 
    (echo "before") && (echo "This is callee" && exit 1)                     
    echo "why I can see this?" 
} 


doSomething 

,这是结果...

+ set -x 
+ doSomething 
+ callee 
+ echo before 
before 
+ echo 'This is callee' 
This is callee 
+ exit 1 
+ echo 'why I can see this?' 
why I can see this? 
+ echo 'It should not go to here!' 
It should not go to here! 

我看到命令“退出”,但它并没有退出工作退出脚本

为什么退出不起作用?

回答

5

您从子shell中调用exit,所以这是退出的shell。试试这个:

function callee() { 
    (echo "before") && { echo "This is callee" && exit 1; }                     
    echo "why I can see this?" 
} 

然而,这将从任何叫做callee的壳中退出。您可能想使用return而不是exit从该功能返回。

3

当您在()中运行命令时,您正在生成一个子shell。因此,当您在该子外壳中调用exit时,您只是退出它,而不是您的顶级脚本。

0

因为全局假设创建了一个新的嵌套shell,它以exit退出。