我还在学习编写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行:找不到日志:命令
感谢。
答案 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.sh
和processData.sh
时,它们作为普通可执行文件启动,因此父shell无法识别为shell脚本,并且为每个脚本启动了shell解释器的新实例。新的shell解释器对log
函数一无所知。
当你像这样运行loadFile.sh
和processData.sh
时:
. home/script/loadFile.sh && . home/script/processData.sh
Shell将它们视为shell脚本而不是普通的可执行文件,并在当前上下文中执行,从而使函数log
可见。此外,loadFile.sh
和processData.sh
中定义的任何函数/变量在它们将退出后将在父shell中可见,因此这些脚本有许多方法来破坏父shell,这在某些情况下会使这种方式不安全