麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

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

2024-07-14 08:43:37
字體:
來源:轉載
供稿:網友

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

總結

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


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 一级全毛片 | 一级成人免费 | 日韩字幕 | 把娇妻调教成暴露狂 | 黄色的视频免费看 | 久久久久久久久久久一区 | 成码无人av片在线观看网站 | 羞羞电影在线观看www | 日美黄色片 | 欧美77| 中文字幕在线观看精品 | 国产精品久久久久久久久久10秀 | 成人做爰高潮片免费视频韩国 | 黄色毛片免费视频 | 一区二区久久久久草草 | 欧美亚洲啪啪 | 中国免费一级毛片 | 一级黄色免费观看 | 国产精品久久久乱弄 | 欧美视频一二区 | 蜜桃久久一区二区三区 | 久久久久久久黄色片 | 精品国产99久久久久久宅男i | 日韩在线播放一区二区 | 国产毛片网站 | 99亚洲伊人久久精品影院红桃 | 天天操天天骑 | 久久久国产视频 | 黄色毛片免费看 | 性插视频| 91精品老司机 | av在线播放地址 | 一级精品 | 91成人影库 | 国产高清自拍一区 | 日韩精品一二三区 | 日本在线一区二区 | 亚洲福利视频52 | 黄视频网站免费观看 | 欧美日韩大片在线观看 | 欧美乱码精品一区 |