Magisk模块Shell脚本跨文件调用函数失败,求解决方法
Magisk模块Shell函数调用失败问题解决
问题场景
开发Magisk模块时,主脚本install.sh无法调用functions.sh中定义的Shell函数,尝试source函数文件时模块安装直接崩溃。
相关代码
install.sh 代码
#!/system/bin/sh MODDIR=${0%/*} echo "running chmod" chmod +x install.sh echo "adding functions.sh" . functions.sh echo "function retrieved" TEXT="I am here" check $text
functions.sh 代码
check(){ TESTTEXT=$1 echo "${TESTEXT}" return 0 }
安装错误输出
-Copying zip to temp directory -Installing module.zip -Device is system-as-root running chmod adding functions.sh ! Installation failed
已尝试的source方式
source /functions.sh. functions.sh. ./functions.sh
解决步骤
- 修正文件路径引用
Magisk安装模块时,脚本会在临时目录执行,直接用functions.sh无法定位文件。需利用MODDIR变量(模块解压后的根目录)指定路径,正确的source命令应为:
. $MODDIR/functions.sh
修复函数内变量拼写错误
functions.sh中echo "${TESTEXT}"是拼写失误,应为echo "${TESTTEXT}",原代码少写了字母T,会导致输出空值。修正变量大小写
Shell变量区分大小写,install.sh中定义的变量是TEXT,调用时却用了小写的$text,应改为:
check $TEXT
- 移除不必要的chmod操作
Magisk会自动处理模块脚本的执行权限,chmod +x install.sh属于冗余操作,且在临时目录执行可能引发权限问题,建议删除该行。
修正后完整代码
install.sh
#!/system/bin/sh MODDIR=${0%/*} echo "adding functions.sh" . $MODDIR/functions.sh echo "function retrieved" TEXT="I am here" check $TEXT
functions.sh
check(){ TESTTEXT=$1 echo "${TESTTEXT}" return 0 }
内容的提问来源于stack exchange,提问作者Sudeep Kunwar
相关产品推荐
相关产品推荐

