2

我有一个这样的shell脚本,

    #Script name : test.sh
    mkdir /boot
    mount -t vfat /dev/block/mmcblk0p1 /boot
    cp file1 /boot
    umount /boot

    mkdir -p /test1/test2/test3
    cp file2 /test1/test2
    cp file3 /test1/test2/test3
    STATUS=TRUE

现在这个脚本位于 /test/ 目录中。我从 ac 函数调用这个脚本,该函数是通过 jni 从 android 应用程序调用的。我正在使用此函数在 C 中调用我的脚本

void Java_com_ndkdemo_NDKdemoActivity_systemcall(JNIEnv * env, jobject obj) {
    fp = popen(". /test/./test.sh; echo STATUS=$STATUS","r");
    while (fgets(buffer, sizeof (buffer), fp) != 0)
    {
        LOGD("%s",buffer);
    }
}

现在,当我从我的活动中调用此系统调用函数时,它无法执行脚本 test.sh 中的命令如果我从普通 C 源代码编译二进制文件并在控制台上执行该二进制文件,则相同的脚本正在工作。我尝试使用“chmod 777 /test/test.sh”授予权限,但仍然无法正常工作。

任何帮助将不胜感激。谢谢你。

4

1 回答 1

1

如果您的 shell 解释器是/system/bin/sh

  • 对于以shebang开头的 shell 脚本,制作它#!/system/bin/sh

  • 尝试使用解释器路径本身而不是.字符来运行您的脚本

而且似乎popen 可能不适用于旧版本的 Android

于 2012-06-01T10:20:42.040 回答