代码之家  ›  专栏  ›  技术社区  ›  Roxxy_9

从android应用程序运行shell脚本的权限被拒绝

  •  2
  • Roxxy_9  · 技术社区  · 7 年前

    我正在尝试从我的android应用程序运行一个脚本,.sh位于/res/raw文件夹中,该文件夹最终被复制到内部存储中,而根目录设备不是一个选项。

    但我面临一个错误:运行exec()时出错。命令:[……]其中原因是java.io.ioexception:权限被拒绝;我已经试着运行bash两天了,但是现在我看不到更多,希望头脑更清醒的人能看到缺少的东西。

    我也试过运行chmod 775

    脚本(test.sh):

    #!/bin/bash
    REQUESTDATE=`date "+%Y-%m-%dT%H:%M:%S"`
    URL=https://.....
    Resp=`curl -v -H "date: $REQUESTDATE" -H "Content-Type: application/json" -X POST -d@my_json.json $URL`
    echo $Resp
    

    在我的Android应用程序上:

    private void runCommand(){
            String pathToScript = getDir("my_scripts",Context.MODE_PRIVATE).getAbsolutePath() + File.separator + "test.sh";
            String[] commands = {"bash", "-c", pathToScript};
    
            try{
                java.lang.Process process = new ProcessBuilder()
                        .command(commands)
                        .directory(new File (getDir("my_scripts",Context.MODE_PRIVATE).getAbsolutePath()))
                        .redirectErrorStream(true)
                        .start();
    
                //Read output
                StringBuilder output = new StringBuilder();
    
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line = "";
                while ((line = bufferedReader.readLine()) != null){
                    output.append(line + "\n");
                }
    
                if (process.waitFor() == 0){
                    Log.i(TAG, "Success");
                } else{
                    e.printStackTrace();
                } 
            }catch(IOException e){
            e.printStackTrace();
            }catch (Exception e){
                e.printStackTrace();
            }
    }
    
    0 回复  |  直到 7 年前