如何在java程序中运行长shell脚本代码?

时间:2014-10-20 21:46:52

标签: java shell

我正在编写一个应该ssh到IP并运行shell脚本代码的Java程序。

问题是脚本太长,应该由java代码携带。

我使用了sshxcute库。

我有两个解决方案:

  1. 将所有脚本逐行放到JAVA代码中作为字符串并立即执行它们(如何做?)或将该脚本代码分离为80行作为字符串并逐个在JAVA中运行。 (我不认为这是一种有效的方式!但我知道如何做到这一点的唯一方法)

  2. 将该shell脚本代码放在JAVA文件中并由JAVA执行(我不知道该怎么做。)。我应该把它放在哪里(主要包裹?)以及要解决的问题?

1 个答案:

答案 0 :(得分:1)

最简单的方法是在远程计算机上启动ssh会话,然后将命令发送到它:

// start ssh session to machine alan
Process p = new ProcessBuilder("ssh", "alan").start();
// get a means of reading its output
final Scanner reader = new Scanner(p.getInputStream());
// start a new thread going to read its output
Thread readThread = new Thread(new Runnable() {
    public void run() {
        while (reader.hasNextLine())
            System.out.println(reader.nextLine());
        reader.close();             
    }
});
readThread.start();
// get a means of sending it commands
PrintWriter writer = new PrintWriter(p.getOutputStream());
// send some commands
writer.println("touch /tmp/somefile");
writer.println("hostname");
writer.println("ls -l /home");
writer.println("uptime");
writer.println("exit");
writer.close();
// wait for reading thread to finish
readThread.join();

启动进程,并登录到远程计算机。然后它启动一个新线程来读取进程的输出(就你的程序而言,这是一个输入流),并创建一个可用于发送命令的PrintWriter (这是进程的输入,但是对于程序而言是输出流)。

当我在笔记本电脑上运行时,我得到了

alan
total 20
drwx------ 65 james james  4096 Oct 16 21:50 james
drwx------  2 root  root  16384 Apr  1  2014 lost+found
 23:12:13 up 6 days,  8:46,  5 users,  load average: 0.19, 0.19, 0.20

,正如您所看到的,是我发送的命令的输出。