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

从java运行bash命令时如何解决权限问题,java,bash,Java,Bash,从控制台运行命令时,一切正常: sudo -u oracle fgrep ... 当我使用ProcessBuilder从Java代码运行相同的命令时,sudo不起作用,我需要将chmod设置为775,否则我没有读取日志的权限 为什么这样不行?是否有不使用chmod 775读取日志的选项 下面是我如何使用ProcessBuilder的: ProcessBuilder pb = new ProcessBuilder("bash", "-c", command); Process shell = p

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

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();

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


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

既然您说它可以工作的日志文件是
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

时,它会像在命令行中一样运行。您正在使用的Java代码是什么?您的命令要求输入吗?输入是什么意思?有一些parameter@hudi--比如,它是否希望输入密码。。。像
sudo
通常是这样吗?不需要通过为什么数组?PB的参数是字符串。。。不是数组如果仔细看,它是一个字符串数组:
ProcessBuilder(String…command)
这没有问题,因为当我将chmod设置为775时,它工作正常,所以我正确运行command!多糟糕的规格:这太糟糕了。我诚挚的哀悼,我将收回我的回答,因为你验证了它关于用户证书的声明,那么bash和-c呢?我的命令看起来像。。。新的ProcessBuilder(“bash”、“-c”、“sudo-u oracle fgrep…”);对这是正确的。当它在shell中执行时,它看起来像:
bach-c“sudo commandname param1 param2…”