zoukankan      html  css  js  c++  java
  • 在java中调用shell命令和执行shell脚本

    在java中调用shell命令和执行shell脚本

    1. bash脚本自动输入sudo命令

      man sudo

      -S The -S (stdin) option causes sudo to read the password from
      the standard input instead of the terminal device. The
      password must be followed by a newline character.

      使用管道作为标准输入

      echo "password" |sudo -S

      这样就能避免和shell交互,从而应用在脚本中了。

    2. java调用shell脚本

          public static String bashCommand(String command) {
              Process process = null;
              String stringBack = null;
              List<String> processList = new ArrayList<String>();
              try {
                  process = Runtime.getRuntime().exec(command);
                  BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
                  String line = "";
                  while ((line = input.readLine()) != null) {
                      processList.add(line);
                  }
                  input.close();
              } catch (IOException e) {
                  e.printStackTrace();
              }
              for (String line : processList) {
                  stringBack += line;
                  stringBack +="
      ";
              }
              return stringBack;
          }
      

      But我发现了一个问题,就是如果将项目打包成jar包的话(项目是一个桌面软件),jar包内的资源不能直接被外部引用,例如:如果把一个脚本放在resource下,通过getResoures来获得path,然后执行“bash <该脚本的path>”就无法运行,因为此时这个脚本文件是在jar包内的。我想到的解决办法就是要执行脚本时先通过getClass().getClassLoader().getResource().openStream();获得输入流,然后创建一个文件,将原脚本的文件通过流写入到新文件(此时这个文件是在jar包外的),然后执行新文件,执行完后删除掉。

      并且发生了一个使事情:有的命令在shell中确实是有返回值的,但是用上面的函数返回的却总是null,后来我想了个笨办法,就是写一个shell脚本,将命令返回值赋值给一个变量,再echo这个变量:

      #!/bin/bash
      ip=$(ifconfig | grep "inet 192*")
      echo $ip
      
  • 相关阅读:
    leetcode:655. 输出二叉树
    leetcode:763. 划分字母区间
    leetcode:3. 无重复字符的最长子串
    leetcode:2. 两数相加
    leetcode每日一题:409. 最长回文串
    leetcode:1381. 设计一个支持增量操作的栈
    leetcode:1380. 矩阵中的幸运数
    [数据结构] 迷宫问题(栈和队列,深搜和广搜)
    [数据结构] N皇后问题
    [2011山东ACM省赛] Sequence (动态规划)
  • 原文地址:https://www.cnblogs.com/jiading/p/12317729.html
Copyright © 2011-2022 走看看