2012-06-01 53 views
2

我有这样一个shell脚本,运行shell脚本从Android应用程序

#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 

现在这个脚本位于/测试/目录下。 我从通过jni从android应用程序调用的c函数调用此脚本。 我使用这个功能把我的脚本在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

如果你的shell解释是/system/bin/sh则:

  • 为与shebang启动shell脚本,使它#!/system/bin/sh

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

而且看起来popen may not work in older versions of Android

+0

Yup也尝试过这些东西..但仍然没有工作,顺便说一句,如果我将使用解释器而不是如何使用解释器,会有什么区别。字符?我正在使用这个。因为我需要当前控制台中的STATUS变量,其他明智的我将无法使用它。 – user1310041

+0

为什么你需要STATUS变量?也许你可以把它放在你的test.sh中并简化你的命令,以尽量减少问题出现的地方。 – gfour