从android应用程序运行shell脚本

时间:2012-06-01 10:08:37

标签: android shell android-ndk

我有一个像这样的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 /目录中。 我从一个c函数调用这个脚本,这个函数是通过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”给予许可,但仍然没有用。

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

1 个答案:

答案 0 :(得分:1)

如果您的shell解释器是/system/bin/sh,那么:

  • 对于以shebang开头的shell脚本,请将其设为#!/system/bin/sh

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

似乎是popen may not work in older versions of Android