一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java調用shell腳本解決傳參和權限問題的方法

Java調用shell腳本解決傳參和權限問題的方法

2019-06-23 11:07雙斜杠少年 Java教程

今天小編就為大家分享一篇關于Java調用shell腳本解決傳參和權限問題的方法,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

1. java 執行shell

java 通過 Runtime.getRuntime().exec() 方法執行 shell 的命令或 腳本,exec()方法的參數可以是腳本的路徑也可以是直接的 shell命令

代碼如下(此代碼是存在問題的。完整代碼請看2):

 /**
   * 執行shell
   * @param execCmd 使用命令 或 腳本標志位
   * @param para 傳入參數
   */
  private static void execShell(boolean execCmd, String... para) {
    StringBuffer paras = new StringBuffer();
    Arrays.stream(para).forEach(x -> paras.append(x).append(" "));
    try {
      String cmd = "", shpath = "";
      if (execCmd) {
        // 命令模式
        shpath = "echo";
      } else {
      //腳本路徑
        shpath = "/Users/yangyibo/Desktop/callShell.sh";
      }
      cmd = shpath + " " + paras.toString();
      Process ps = Runtime.getRuntime().exec(cmd);
      ps.waitFor();
      BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
      StringBuffer sb = new StringBuffer();
      String line;
      while ((line = br.readLine()) != null) {
        sb.append(line).append("\n");
      }
      String result = sb.toString();
      System.out.println(result);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

2. 遇到的問題和解決

  • 傳參問題,當傳遞的參數字符串中包含空格時,上邊的方法會把參數截斷,默認為參數只到空格處。
  • 解決:將shell 命令或腳本 和參數 放在一個 數組中,然后將數組傳入exec()方法中。
  • 權限問題,當我們用 this.getClass().getResource("/callShell.sh").getPath() 獲取腳本位置的時候取的 target 下的shell腳本,這時候 shell 腳本是沒有執行權限的。
  • 解決:在執行腳本之前,先賦予腳本執行權限。

完整的代碼如下

 /**
   * 解決了 參數中包含 空格和腳本沒有執行權限的問題
   * @param scriptPath 腳本路徑
   * @param para 參數數組
   */
  private void execShell(String scriptPath, String ... para) {
    try {
      String[] cmd = new String[]{scriptPath};
      //為了解決參數中包含空格
      cmd=ArrayUtils.addAll(cmd,para);
      //解決腳本沒有執行權限
      ProcessBuilder builder = new ProcessBuilder("/bin/chmod", "755",scriptPath);
      Process process = builder.start();
      process.waitFor();
      Process ps = Runtime.getRuntime().exec(cmd);
      ps.waitFor();
      BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
      StringBuffer sb = new StringBuffer();
      String line;
      while ((line = br.readLine()) != null) {
        sb.append(line).append("\n");
      }
      //執行結果
      String result = sb.toString();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

源碼位置:

https://github.com/527515025/JavaTest/tree/master/src/main/java/com/us/callShell

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品短视频 | 四虎免费永久观看 | 好大用力深一点视频 | chinesefree普通对话| 免费在线观看中文字幕 | 色综合欧美色综合七久久 | 91精品国产色综合久久 | 精品精品国产自在香蕉网 | 教师波多野结衣在线播放 | 美女扒开胸罩露出胸大乳 | 日韩精品在线一区二区 | 国产主播福利在线观看 | 视频国产91| 精品一区二区三区免费视频 | 性做久久久久久久久浪潮 | 精品视频免费在线观看 | 日本 视频 在线 | 国产精品久久久久无毒 | 国产一卡二卡3卡4卡四卡在线 | 美女张开下身让男人桶 | 免费一级毛片在线播放放视频 | 91国产在线第7页 | 日本精品www色 | 无人区乱码1区2区3区网站 | 色狠狠婷婷97| 精品国产91久久久久 | 女人张开腿让男人桶视频免费大全 | 男女性潮高片无遮挡禁18 | 色悠久久久久综合网小说 | 喷奶水榨乳ova动漫无修 | 晚上禁用的十大黄台视频 | 亚洲国产精品高清在线 | 亚洲嫩模吧粉嫩粉嫩冒白浆 | 青青草国产青春综合久久 | 国内精品视频一区二区三区八戒 | 成人在线观看一区 | 国产乱人乱精一区二区视频密 | video one 中国按摩| 黑人好大好硬好深好爽想要h | 希岛爱理作品在线观看 | 奇米影视4444|