如何从shell命令中获取shell中的字符串或值到JAVA?

时间:2017-03-30 14:44:23

标签: java shell

可以将linux shell中的命令输出到JAVA应用程序吗?如果可能的话怎么样?我看到有机会从JAVA执行一个shell命令我希望得到相反的结果:SHELL COMMANDS OUTPUT ---> to ---> Java VARIABLE或STRING。谢谢你的回复

3 个答案:

答案 0 :(得分:1)

好的,假设你想在linux中运行X命令。

然后在终端类型:

x > "myfilename"

举一个例子:

netstat > "xyz"

这将创建一个文件'xyz'并将所有输出传输给它。

这会将所有输出都放到'myfilename'。

现在,您可以从java应用程序中读取该文件的所有内容。

替代:

您可以从java运行shell命令并收集输出以供以后处理。

答案 1 :(得分:0)

1命令行参数

假设您在启动java程序时尝试将linux命令的输出传递给java,这在bash中很简单。使用反向标记(`)在您放置命令行参数的位置包围linux命令。 E.g:

$ java [... java options, like -jar path/to/file.jar ...] -- `linux-command`

(如果输出包含空格,您可能需要做一些引号或某种类型的转义。)

然后,在您的java程序中,该值将位于args数组中:

public static void main(String args[]) {
    String linuxCommandOutput = args[0];
    // rest of program...
}

2系统属性

如果由于某种原因无法使用args,则可以尝试使用系统属性。再次,使用back-ticks(`)来包围linux命令并将其存储在具有-D的系统属性中。像这样:

$ java -Dvariable=`linux-command` [... java options ...]

然后,在您的java程序中,读取系统属性的值:

public static void main(String args[]) {
    String linuxCommandOutput = System.getProperty("variable");
    // rest of program...
}

答案 2 :(得分:0)

您可以使用jcraft然后执行返回输出的命令

实施例

host = //your hostIP;

String user = "username";
String password = "pwd";


String command = "the command you want to execute";
try {

  java.util.Properties config = new java.util.Properties();
  config.put("StrictHostKeyChecking", "no");
  JSch jsch = new JSch();
  Session session = jsch.getSession(user, host, 22);
  session.setPassword(password);
  session.setConfig(config);
  session.connect();
  System.out.println("Connected");

  Channel channel = session.openChannel("exec");
  ((ChannelExec) channel).setCommand(command);
  channel.setInputStream(null);
  ((ChannelExec) channel).setErrStream(System.err);

  InputStream in = channel.getInputStream();
  channel.connect();
  byte[] tmp = new byte[1024];
  while (true) {
    while (in.available() > 0) {
      int i = in.read(tmp, 0, 1024);
      if (i < 0)
        break;
      area.append(new String(tmp, 0, i));
      //System.out.print(new String(tmp, 0, i)); //command output
    }
    if (channel.isClosed()) {
      System.out.println("exit-status: " + channel.getExitStatus());
      break;
    }
    try {
      Thread.sleep(1000);
    } catch (Exception ee) {
    }
  }
  channel.disconnect();
  session.disconnect();
  System.out.println("DONE");
} catch (Exception e) {
  e.printStackTrace();
  return false;
}