java调⽤shell脚本权限_Java调⽤shell脚本解决传参和权限问
题的⽅法
1. java 执⾏shell
java 通过 Runtime().exec() ⽅法执⾏ shell 的命令或 脚本,exec()⽅法的参数可以是脚本的路径也可以是直接的 shell命令代码如下(此代码是存在问题的。完整代码请看2):
/**
* 执⾏shell
* @param execCmd 使⽤命令 或 脚本标志位
* @param para 传⼊参数
*/
private static void execShell(boolean execCmd, 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 + " " + String();
Process ps = Runtime().exec(cmd);
ps.waitFor();
BufferedReader br = new BufferedReader(new InputStream()));
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()⽅法中。
权限问题,当我们⽤ Class().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().exec(cmd);
ps.waitFor();
BufferedReader br = new BufferedReader(new InputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
//执⾏结果shell代码
String result = sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
}
源码位置:
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对脚本之家的⽀持。如果你想了解更多相关内容请查看下⾯相关链接
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论