当前位置: 首页 > 知识库问答 >
问题:

从java执行终端命令

程钧
2023-03-14

我知道有很多关于这个的线索,但是没有一个对我有用。以下是我试图做的:

Javac并从我的java代码中运行一个文件。它适用于视窗系统,但我想让它也适用于UNIX。代码如下:

if(os.equals("win")){
        //For Windows
        try {
            Runtime.getRuntime().exec(
                            "cmd /c start cmd.exe /K "
                            + "\"cd " + path + "&& "
                            + "javac " + name + ".java && "
                            + "echo ^>^>" + name + ".java " + "outputs: &&"
                            + "echo. &&"
                            + "java " + name + " && "
                            + "echo. &&"
                            + "pause && "
                            + "exit\"");
        } catch (IOException e) {
            System.out.println("Didn't work");
        }
    }else{
        try {
            //TODO make it work for UNIX
            Runtime.getRuntime().exec("");
        } catch (IOException e) {
            System.out.println("Didn't work");
        }
    }

问题是,在UNIX系统上,它的行为“不可预测”,例如:

Runtime.getRuntime().exec("open image.png");

打开图像,但

Runtime.getRuntime().exec("javac Test.java");
Runtime.getRuntime().exec("echo 'hello'");

它什么也没做。没有按摩。

我非常感谢您的任何意见。

更新------------------------------------------------------------

似乎与Windows CMD不同,终端需要一个InputStreamReader来显示exec中发生的事情。我在另一个线程中发现了这段代码,现在至少我从exec终端获得了一些输出。

   String line;
   Process p = Runtime.getRuntime().exec( "echo HelloWorld2" );

   BufferedReader in = new BufferedReader(
           new InputStreamReader(p.getInputStream()) );
   while ((line = in.readLine()) != null) {
     System.out.println(line);
   }
   in.close();

但是事情仍然不确定,因为执行

进程p=运行时。getRuntime()。exec(“javac Test.java”);

生成一个Test.class文件但是

进程p=Runtime.getRuntime(). exec("javac Test.java

什么都不做。(什么也没发生。终端“执行”时没有错误信息。)在Terminal builds(终端构建)中手动输入,并按预期运行。我错过了什么?

共有1个答案

焦学海
2023-03-14

我这里没有Linux系统可以玩,但是我很确定上面的第二个命令试图编译Java名为“Test.java”的文件

你可能会让它与以下内容一起工作:

Process p = Runtime.getRuntime().exec(
    new String[] { "sh",  "-c", "javac Test.java && java Test" });
 类似资料:
  • 关于通过Java向终端发送命令,我遇到了一个非常令人困惑的问题。我有这个密码: 第一个命令是这个"useradd user-p密码-d /home/ftp/test/-s /bin/false",第二个应该是这个回显用户名:new_password|chpasswd,第一个命令工作没有任何问题,并创建了我定义的用户"服务器"变量,但当我试图执行第二个命令来改变用户传递此命令可能永远不会发生,输出为

  • 我对Java比较陌生,我完成了教程,其中解释了如何创建和运行JAR文件的示例。您能告诉我在命令行中运行JAR应该做些什么吗? 我创建了JAR文件: 此Jar文件已复制到桌面 我希望命令:java-jar06_02.jar应该执行文件。 在IntelliJ终端中,我切换到桌面目录(文件所在)并运行:java-jar 06\u 02。罐子 这会导致错误: 错误:发生JNI错误,请检查您的安装并在线程“

  • 问题内容: 我正在尝试从Java执行SOX命令,但不幸的是,它每次都会返回错误。其他所有SOX命令都可以正常运行!!这是代码: 当我在终端中执行相同的sox命令时,它的工作正常。我真的不明白问题是什么!是因为“ |” 符号?? 问题答案: 问题是Runtime.exec()无法理解shell概念,例如“ |”。而是尝试: 问题是exec直接运行二进制文件而不调用shell。“ |” 字符只能被外壳

  • 问题内容: 这里的目标是在新的shell中运行新的python文件,并在现有的shell中运行现有的python文件。说我有两个文件,aaa.py和bbb.py。为了简单起见,aaa.py所做的只是… …并且可以说bbb.py确实是… 现在的目标是在终端1中运行aaa.py,并使其在终端2中启动bbb.py。我希望存在类似下面的命令,但无法弄清楚。 问题答案: 通常,无法从shell进行此操作。您

  • 我希望在中运行多个命令,如下所示: 那么如何保存上一个命令的状态并将其用于下一个命令??

  • M1 Mac系统终端< code>firebase模拟器:启动按预期工作。 但VSCode在同一命令上集成了终端错误(错误如下)。 我该如何解决这个问题? 如果重要的话,我同时使用Fish和Zsh,并且两者的行为是一致的:Fish和Zsh都在Mac终端应用程序中运行命令,但不是从VSCode的集成终端运行。 从VSCode集成终端运行时出错: