-1

我有一个需要参数的脚本 bash。

当我直接从腻子调用它时,它可以工作,但是我从我的 jee 程序中调用它不起作用并且没有显示任何错误。

这是我的java代码:

String[] cmdArray = {"sudo", "ssh", "-tt", "root@89.40.112.248", "/root/dve", "-l", "89.40.112.120,89.40.112.248", "you.mp4", "-s",".teeeest.avi" };

List<ObjectNode> listFileNode = new ArrayList<ObjectNode>(); 

try{
        Runtime rt = Runtime.getRuntime();
        ProcessBuilder pb = new ProcessBuilder(cmdArray);
        Process proc = pb.start();     // Start the process.
        System.out.println("Script executing");
        rc= proc.waitFor();    // Wait for the process to finish.
        System.out.printf("Script executed successfully in ", rc);

 InputStream stderr = proc.getErrorStream();
                    InputStreamReader isr = new InputStreamReader(stderr);
                    BufferedReader br = new BufferedReader(isr);

                    String line = null;
                    System.out.println("<ERROR___EXEC>");
                    while ( (line = br.readLine()) != null){

                        System.out.println(line);
                        node.put("line",line );
                        listFileNode.add(node);
                      }
                    System.out.println("</ERROR___EXEC>");
                    int exitVal = proc.waitFor();
                    System.out.println("Process exitValue: " + exitVal);


                    InputStream processInputStream =proc.getInputStream();
                    InputStreamReader inputStreamReader = new InputStreamReader(processInputStream);
                    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

                    System.out.println("<RESULTAT___EXEC>"); 
                    while ( (line = bufferedReader.readLine()) != null){

                        System.out.println(line);
                        node.put("lineR",line );
                        listFileNode.add(node);

                  } 
                    System.out.println("</RESULTAT___EXEC>");  

            }catch (Throwable t)
              {
                t.printStackTrace();
              }

请帮助我,我从一个星期开始就被困在这个问题上,我找不到解决方案

4

1 回答 1

0

您不能sudo在 java 代码中使用命令。如果您需要运行 root 特权应用程序,则需要在运行 java 代码之前切换到 root。

如果您想从您的 java 代码中执行此操作,您需要调用setuid. 但我不知道你可以setuid从java代码中调用。为此,您可能需要一个 C/C++ 包装器来切换到 root。请参阅:http ://unix.stackexchange.com编写包装器的问题。

于 2016-07-26T10:12:26.210 回答