Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
execCMD(“cd~/Desktop/Tmp/Server/”java-javaagent:lib/Agent.jar-cp./Dachuang/Dachuang.jar:testcase test.Bank“);_Java_Exec - Fatal编程技术网

execCMD(“cd~/Desktop/Tmp/Server/”java-javaagent:lib/Agent.jar-cp./Dachuang/Dachuang.jar:testcase test.Bank“);

execCMD(“cd~/Desktop/Tmp/Server/”java-javaagent:lib/Agent.jar-cp./Dachuang/Dachuang.jar:testcase test.Bank“);,java,exec,Java,Exec,为什么我在控制台上得到空结果?我的意思是,也许我不能在一些复杂的命令上正确地执行这个方法。我可以执行(“java--version”)等一些简单的命令。我不知道如何将参数传递给这个方法,我的命令是[cd~/Desktop/Tmp/Server/]和[java-javaagent:lib/Agent.jar-cp./Dachuang/Dachuang.jar:testcase test.Bank] 以下是我的截图: Java不是外壳。你可以用。不要使用cd。和System.getProperty(

为什么我在控制台上得到空结果?我的意思是,也许我不能在一些复杂的命令上正确地执行这个方法。我可以执行(“java--version”)等一些简单的命令。我不知道如何将参数传递给这个方法,我的命令是[cd~/Desktop/Tmp/Server/]和[java-javaagent:lib/Agent.jar-cp./Dachuang/Dachuang.jar:testcase test.Bank]

以下是我的截图:
Java不是外壳。你可以用。不要使用
cd
。和
System.getProperty(“user.home”)
而不是
~
。差不多

package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test{

    public static void execCMD(String cmd){
        StringBuilder result = new StringBuilder();
        try {
            Process p = Runtime.getRuntime().exec(cmd);
            BufferedReader bf = new BufferedReader(new
                    InputStreamReader(p.getInputStream()));
            String line = null;
            while((line=  bf.readLine())!=null) {
                result.append(line+"\n");
            }
        }catch(Exception e) {
            result.delete(0,result.length()-1).append("无效命令");
        };
        System.out.println(result.toString());
    }

    public static void main(String[] args) throws IOException {
        execCMD("cd ~/Desktop/Tmp/Server/ && java -javaagent:lib/Agent.jar -cp ./Dachuang/dachuang.jar:testcase test.Bank");
    }
}


Java不是外壳。你可以用。不要使用
cd
。和
System.getProperty(“user.home”)
而不是
~
。差不多

package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test{

    public static void execCMD(String cmd){
        StringBuilder result = new StringBuilder();
        try {
            Process p = Runtime.getRuntime().exec(cmd);
            BufferedReader bf = new BufferedReader(new
                    InputStreamReader(p.getInputStream()));
            String line = null;
            while((line=  bf.readLine())!=null) {
                result.append(line+"\n");
            }
        }catch(Exception e) {
            result.delete(0,result.length()-1).append("无效命令");
        };
        System.out.println(result.toString());
    }

    public static void main(String[] args) throws IOException {
        execCMD("cd ~/Desktop/Tmp/Server/ && java -javaagent:lib/Agent.jar -cp ./Dachuang/dachuang.jar:testcase test.Bank");
    }
}


正如Elliott所说:Java不是外壳。而且它不理解shell命令语法。当您
exec
(或类似)一个包含空格的字符串时,Java会将其粗略地拆分为一个字符串数组,忽略任何shell转义或引号。然后调用
exec(String[])
,它将第一个单词作为命令名,其余的作为命令的参数

如果确实要使用shell命令语法(例如
&&
)和shell内置命令(例如
cd
),可以执行以下操作:

public static void main(String[] args) throws IOException, InterruptedException {
    File f = new File(System.getProperty("user.home"), "Desktop/Tmp/Server/");
    ProcessBuilder pb = new ProcessBuilder().directory(f);
    pb.inheritIO();
    pb.command("java", "-javaagent:lib/Agent.jar",
            "-cp", "./Dachuang/dachuang.jar:testcase", "test.Bank");
    Process p = pb.start();
    p.waitFor();
}
这实际上是运行
bash
的实例来运行shell命令行。它应该适用于任何命令行。(您需要对命令字符串中的任何反斜杠或双引号字符使用普通Java字符串转义。这是因为这是Java字符串文字…)



对于您的示例,Elliott的答案是一个更优雅的解决方案,但是如果shell命令行更复杂,那么这种方法就太难了。

正如Elliott所说:Java不是shell。而且它不理解shell命令语法。当您
exec
(或类似)一个包含空格的字符串时,Java会将其粗略地拆分为一个字符串数组,忽略任何shell转义或引号。然后调用
exec(String[])
,它将第一个单词作为命令名,其余的作为命令的参数

如果确实要使用shell命令语法(例如
&&
)和shell内置命令(例如
cd
),可以执行以下操作:

public static void main(String[] args) throws IOException, InterruptedException {
    File f = new File(System.getProperty("user.home"), "Desktop/Tmp/Server/");
    ProcessBuilder pb = new ProcessBuilder().directory(f);
    pb.inheritIO();
    pb.command("java", "-javaagent:lib/Agent.jar",
            "-cp", "./Dachuang/dachuang.jar:testcase", "test.Bank");
    Process p = pb.start();
    p.waitFor();
}
这实际上是运行
bash
的实例来运行shell命令行。它应该适用于任何命令行。(您需要对命令字符串中的任何反斜杠或双引号字符使用普通Java字符串转义。这是因为这是Java字符串文字…)



对于您的示例,Elliott的答案是一个更优雅的解决方案,但是如果shell命令行更复杂,那么这种方法就太难了。

使用。不要使用
cd
。和
System.getProperty(“user.home”)
而不是
~
。祝你好运你能告诉我密码吗?对不起,我是新手。使用。不要使用
cd
。和
System.getProperty(“user.home”)
而不是
~
。祝你好运你能告诉我密码吗?对不起,我是新手。