激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - Java教程 - Java調(diào)用shell腳本解決傳參和權(quán)限問題的方法

Java調(diào)用shell腳本解決傳參和權(quán)限問題的方法

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

今天小編就為大家分享一篇關(guān)于Java調(diào)用shell腳本解決傳參和權(quán)限問題的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

1. java 執(zhí)行shell

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

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

 /**
   * 執(zhí)行shell
   * @param execCmd 使用命令 或 腳本標(biāo)志位
   * @param para 傳入?yún)?shù)
   */
  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. 遇到的問題和解決

  • 傳參問題,當(dāng)傳遞的參數(shù)字符串中包含空格時(shí),上邊的方法會(huì)把參數(shù)截?cái)啵J(rèn)為參數(shù)只到空格處。
  • 解決:將shell 命令或腳本 和參數(shù) 放在一個(gè) 數(shù)組中,然后將數(shù)組傳入exec()方法中。
  • 權(quán)限問題,當(dāng)我們用 this.getClass().getResource("/callShell.sh").getPath() 獲取腳本位置的時(shí)候取的 target 下的shell腳本,這時(shí)候 shell 腳本是沒有執(zhí)行權(quán)限的。
  • 解決:在執(zhí)行腳本之前,先賦予腳本執(zhí)行權(quán)限。

完整的代碼如下

 /**
   * 解決了 參數(shù)中包含 空格和腳本沒有執(zhí)行權(quán)限的問題
   * @param scriptPath 腳本路徑
   * @param para 參數(shù)數(shù)組
   */
  private void execShell(String scriptPath, String ... para) {
    try {
      String[] cmd = new String[]{scriptPath};
      //為了解決參數(shù)中包含空格
      cmd=ArrayUtils.addAll(cmd,para);
      //解決腳本沒有執(zhí)行權(quán)限
      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");
      }
      //執(zhí)行結(jié)果
      String result = sb.toString();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

源碼位置:

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)服務(wù)器之家的支持。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲视屏| 久久国产精品久久久久久久久久 | 成年人免费视频大全 | 失禁高潮抽搐喷水h | 免费永久在线观看黄网 | 极色品影院 | 国产午夜精品久久久久 | 免费高清一级欧美片在线观看 | 成人做爽爽爽爽免费国产软件 | 国产精品久久久久久久久久久久久久久 | 日韩精品dvd | 日本中文一级片 | 日韩精品久久久久久久电影99爱 | 久久综合av| 欧美亚洲国产成人综合在线 | 久久综合九色综合久久久精品综合 | 中国一级无毛黄色 | 99久久精约久久久久久清纯 | 精品亚洲va在线va天堂资源站 | 国产精品v片在线观看不卡 成人一区二区三区在线 | 一级黄色在线观看 | 九九热在线视频观看 | 91精品国产九九九久久久亚洲 | 男人的天堂视频网站 | 噜噜噜影院 | 黄视频网站免费观看 | 毛片天天看 | 最新欧美精品一区二区三区 | 日韩每日更新 | 性欧美videos 另类喷潮 | 韩国草草影院 | 久久久亚洲欧美综合 | 亚洲最新无码中文字幕久久 | 女教师~淫辱の动漫在线 | 欧美毛片在线观看 | teensexhd| 免费国产一区 | 亚洲人成中文字幕在线观看 | 亚洲天堂ww | 91av网址 | 一级黄色片武则天 |