从java运行bash命令时如何解决权限问题

时间:2012-12-07 08:18:15

标签: java bash

当我从控制台运行命令时,一切正常:

sudo -u oracle fgrep ...

当我使用ProcessBuilder从Java代码运行相同的命令时,sudo不起作用,我需要将chmod设置为775,否则我无权读取日志。

为什么这不起作用?有没有chmod 775读取日志的选项?

以下是我使用ProcessBuilder的方式:

ProcessBuilder pb = new ProcessBuilder("bash", "-c", command);
Process shell = pb.start();

InputStream is = shell.getInputStream();

2 个答案:

答案 0 :(得分:0)

一个。当您执行命令时,您不需要bash -c。

湾该命令需要在空格上拆分,然后作为数组传递给ProcessBuilder。

答案 1 :(得分:0)

由于你说chmod 775日志文件有效,很明显你的进程没有权限。

您可以使用sudo运行java:

sudo java ClassFileName

或者只是添加sudo作为传递给bash进程的数组中的第一个字符串:

command[0]="sudo -u oracle ";

//command[1]=commandname;

//command[2...n]=Other params;

假设用户oracle在sudoers列表中并且不会要求输入密码,那么当您使用sudo时,这将与在命令行中运行的方式一样运行。