java 调用linux 脚本并获取返回值
生活随笔
收集整理的這篇文章主要介紹了
java 调用linux 脚本并获取返回值
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
大家好,我是烤鴨:
????今天分享下java 調(diào)用 shell腳本 并獲取返回值。
代碼實踐
String cmd = "df -h"; StringBuffer sb = new StringBuffer(); Process process = Runtime.getRuntime().exec(cmd); BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = br.readLine()) != null) {sb.append(line).append("\n"); } String result = sb.toString();這個result就是執(zhí)行cmd后的結(jié)果。
&&或者管道 | 導致無法獲取結(jié)果
String cmd = "cd /root && df -h"; StringBuffer sb = new StringBuffer(); Process process = Runtime.getRuntime().exec(cmd); BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = br.readLine()) != null) {sb.append(line).append("\n"); } String result = sb.toString();腳本改成 包含&&的話,就發(fā)現(xiàn)result是個空值。 因為 shell腳本中如果有多個命令,那么在java中使用BufferedReader獲取腳本的輸出時,只能獲取到第一個命令的輸出,使用/bin/sh -c則能獲取到所有的echo輸出。
Process process = Runtime.getRuntime().exec(cmd); // 修改為 Process process = Runtime.getRuntime().exec(new String[]{"sh", "-c", cmd});同樣的情況如果執(zhí)行帶 sudo 的命令,而報權(quán)限問題,很有可能也是這個問題。
比如這個shell,sudo只能覆蓋到 && 之前
sudo cd /data/aaa && nohup java -jar test.jar利用 “sh -c” 命令,它可以讓 bash 將一個字串作為完整的命令來執(zhí)行
sh -c sudo cd /data/aaa && nohup java -jar test.jar總結(jié)
以上是生活随笔為你收集整理的java 调用linux 脚本并获取返回值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用端口及说明
- 下一篇: elasticsearch 6.x (三