在bash中采用特定功能不起作用

时间:2017-05-14 14:45:11

标签: bash function

我正在尝试获取bash文件的特定功能。 请在下面找到简化的loadfun.sh: -

function a(){
        echo "This is a"
}

function b(){
        echo "This is b"
}

function load(){
        echo "exporting $1"
        export -f $1
}

$@

另外,请在下面找到执行命令序列: -

$cat loadfun.sh                             
function a(){                               
        echo "This is a"                    
}                                           

function b(){                               
        echo "This is b"                    
}                                           

function load(){                            
        echo "exporting $1"                 
        export -f $1                        
}                                           

$@                                          
$                                           
$                                           
$                                           
$sh loadfun.sh a                            
This is a                                   
$                                           
$                                           
$a                                          
bash: a: command not found                  
$                                           
$                                           
$sh loadfun.sh load a                       
exporting a                                 
$                                           
$                                           
$                                           
$a                                          
bash: a: command not found                  
$                                           

我不确定为什么

  

export -f a

不导出功能a。

2 个答案:

答案 0 :(得分:1)

如果您只想在获取文件时设置特定功能,那么您可以使用案例陈述

case $1 in   
a)
        a(){
                echo "This is a"
        }
;;
b)
        b(){
                echo "This is b"
        }
;;
*)
        echo error message
;;
esac

调用脚本
. ./script [function to export]

答案 1 :(得分:0)

来源你的脚本而不是执行它,以便定义和export发生在你当前的shell中:

source loadfun.sh a

顺便说一句,.sh扩展名具有误导性;由于它使用仅限bash的功能,因此应将其命名为loadfun.bash。 (对于可执行脚本,一般不赞成使用扩展,但由于这是作为库加载的,因此扩展是合适的。)