2

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

我有一个名为 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 行:日志:找不到命令

谢谢。

4

3 回答 3

3

这不是可移植的,但bash您可以简单地导出函数定义:

export -f log
home/script/loadFile.sh && home/script/processData.sh
于 2013-03-07T12:23:42.777 回答
1

你需要这样提示:

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

但是,如果您exit的 loadFile.sh 或 processData.sh 中有一个命令,那么您的 main.sh 也将存在

于 2013-03-07T12:18:18.410 回答
1

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

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

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

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

于 2013-03-07T12:25:59.093 回答