在shell脚本中调用的脚本文件中调用主脚本函数

时间:2013-03-07 12:11:42

标签: shell

我还在学习编写shell脚本,所以我不知道是否可以这样做。

我有一个名为main.sh的主脚本

Main.sh

#!/bin/bash
function log {
    echo "[${USER}][`date`] - ${*}" >> ${LOG_FILE}
}

home/script/loadFile.sh && home/script/processData.sh

所以我的问题是我可以在loadFile.sh和processData.sh脚本文件中调用main.sh的日志功能吗? 我试了但是我收到了错误

  

第1行:找不到日志:命令

感谢。

3 个答案:

答案 0 :(得分:3)

这不可移植,但在bash中,您只需导出函数定义:

export -f log
home/script/loadFile.sh && home/script/processData.sh

答案 1 :(得分:1)

你需要像这样提示:

. home/script/loadFile.sh && . home/script/processData.sh

但是如果你的loadFile.sh或processData.sh中有exit命令,那么你的main.sh也会存在

答案 2 :(得分:1)

当您像这样开始loadFile.shprocessData.sh时,它们作为普通可执行文件启动,因此父shell无法识别为shell脚本,并且为每个脚本启动了shell解释器的新实例。新的shell解释器对log函数一无所知。

当你像这样运行loadFile.shprocessData.sh时:

. home/script/loadFile.sh && . home/script/processData.sh

Shell将它们视为shell脚本而不是普通的可执行文件,并在当前上下文中执行,从而使函数log可见。此外,loadFile.shprocessData.sh中定义的任何函数/变量在它们将退出后将在父shell中可见,因此这些脚本有许多方法来破坏父shell,这在某些情况下会使这种方式不安全