从java代码运行shell脚本

从java代码运行shell脚本,java,exec,Java,Exec,我想把这件事弄清楚,快累死了。。有人能帮忙吗。。。求你了 代码如下: import java.io.*; import java.lang.Runtime; import java.util.*; public class WORKBRO { public static void main(String args[]) { try { String target = new String("/home/dhi

我想把这件事弄清楚,快累死了。。有人能帮忙吗。。。求你了

代码如下:

import java.io.*;
import java.lang.Runtime;
import java.util.*;

public class WORKBRO {  

    public static void main(String args[])
    {
        try
        {    
            String target = new String("/home/dhirendra.panwar/Desktop/test.sh");
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec(target);

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

您的代码是正确的,我相信您不会得到异常,如果您使用
proc.getErrorStream()
阅读,您将不会得到任何结果。
命令100%以这种方式执行,现在的问题是您正在回送某些内容,需要使用
BufferedReader
将其读回

检查下面的示例,它将成功创建一个名为“stackOverflow”的目录,并打印您要回显的内容。要将其放入日志文件,恐怕您可以使用“>”来完成,您可能需要使用一些编辑器命令或使用Java创建文件

底线:
Runtime.getRuntime().exec(“command”)
是从Java执行Unix命令或脚本的正确且定义明确的方法,它可以正常工作

test.sh

#!/bin/bash
echo "hola"
mkdir stackOverflow
Test.java

import java.io.*;
public class Test {

        public static void main(String[] args) throws Exception {
                try {
                        String target = new String("/home/hagrawal/test.sh");
// String target = new String("mkdir stackOver");
                        Runtime rt = Runtime.getRuntime();
                        Process proc = rt.exec(target);
                        proc.waitFor();
                        StringBuffer output = new StringBuffer();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                        String line = "";                       
                        while ((line = reader.readLine())!= null) {
                                output.append(line + "\n");
                        }
                        System.out.println("### " + output);
                } catch (Throwable t) {
                        t.printStackTrace();
                }
        }
}

您的代码是正确的,我相信您不会得到异常,如果您使用
proc.getErrorStream()
阅读,您将不会得到任何结果。
命令100%以这种方式执行,现在的问题是您正在回送某些内容,需要使用
BufferedReader
将其读回

检查下面的示例,它将成功创建一个名为“stackOverflow”的目录,并打印您要回显的内容。要将其放入日志文件,恐怕您可以使用“>”来完成,您可能需要使用一些编辑器命令或使用Java创建文件

底线:
Runtime.getRuntime().exec(“command”)
是从Java执行Unix命令或脚本的正确且定义明确的方法,它可以正常工作

test.sh

#!/bin/bash
echo "hola"
mkdir stackOverflow
Test.java

import java.io.*;
public class Test {

        public static void main(String[] args) throws Exception {
                try {
                        String target = new String("/home/hagrawal/test.sh");
// String target = new String("mkdir stackOver");
                        Runtime rt = Runtime.getRuntime();
                        Process proc = rt.exec(target);
                        proc.waitFor();
                        StringBuffer output = new StringBuffer();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                        String line = "";                       
                        while ((line = reader.readLine())!= null) {
                                output.append(line + "\n");
                        }
                        System.out.println("### " + output);
                } catch (Throwable t) {
                        t.printStackTrace();
                }
        }
}


你有什么例外?结果是什么?您希望得到什么?必须运行shell脚本测试。sh。。。但它不起作用…test.sh包含…#/bin/bash echo“hola”>>应该触发dashboard.logso test.sh,并且应该创建日志文件dashboard.log…:(尝试了所有方法,但仍然无效..我也尝试了该线程..您得到了什么异常?结果是什么?您希望得到什么?必须运行shell脚本测试。sh…但它不起作用…test.sh包含…#!/bin/bash echo“hola”>>应触发dashboard.logso test.sh并创建日志文件dashboard.log…:(尝试了所有操作,但仍然无法运行..我也尝试了该线程..嘿,感谢您确认这确实有效..我尝试了您的代码..hola正在控制台上打印,这很好..这意味着脚本正在执行..但是目录“stackOverflow”没有创建…太疯狂了…如果脚本正在运行,那么该目录也应该被创建…它可以是什么…?在test.sh文件中,必须给出创建该文件夹的绝对路径…#!/bin/bash echo“hola”mkdir/tmp/stackoverflow从JAVA调用脚本是一种好的做法吗?有任何性能问题吗?@kautuksahni我认为这不是实践的“问题”,而是“用例”的问题,如果您正在处理Java程序,并且需要在内核上调用脚本或执行命令,那么您必须这样做,这实际上取决于您是否能够以其他方式实现它,而且从Java代码调用脚本并不罕见。我确定在这种情况下,您所说的性能问题是什么意思。@hagrawal感谢您的及时回复,我t当然是有用的。当我说性能问题时,它是关于JAVA-3rd party REST调用与JAVA Python(脚本调用)的。我见过许多人从JAVA调用Python脚本,而不是使用第三方语言(Python)创建可伸缩的基于REST的体系结构.我对JAVA世界非常陌生,因此请原谅我对JAVA缺乏了解。但我想了解JAVE脚本调用的调用堆栈(如果您能提供给我的话).嘿,感谢您确认这确实有效…我尝试了您的代码..hola正在控制台上打印,这很好…这意味着脚本正在执行..但是目录“stackOverflow”没有创建…太疯狂了…如果脚本正在运行,那么该目录也应该被创建…它可以是什么…?在test.sh文件中,必须给出创建该文件夹的绝对路径…#!/bin/bash echo“hola”mkdir/tmp/stackoverflow从JAVA调用脚本是一种好的做法吗?有任何性能问题吗?@kautuksahni我认为这不是实践的“问题”,而是“用例”的问题,如果您正在处理Java程序,并且需要在内核上调用脚本或执行命令,那么您必须这样做,这实际上取决于您是否能够以其他方式实现它,而且从Java代码调用脚本并不罕见。我确定在这种情况下,您所说的性能问题是什么意思。@hagrawal感谢您的及时回复,我t当然是有用的。当我说性能问题时,它是关于JAVA-3rd party REST调用与JAVA Python(脚本调用)的。我见过许多人从JAVA调用Python脚本,而不是使用第三方语言(Python)创建可伸缩的基于REST的体系结构.我对JAVA世界非常陌生,因此请原谅我对JAVA缺乏了解。但我想了解JAVE脚本调用的调用堆栈(如果您能提供给我的话)。