Process process = Runtime.getRuntime().exec("echo password | sudo -S open -a safari");
String line;
BufferedReader input = new BufferedReader(new InputStreamReader(pb.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
}
input.close();
这个过程没有任何输出,它停在那里,什么也没有发生。 我已经尝试从终端运行相同的命令,它可以正常工作。
我尝试了这个链接中提到的方法
但是它也没有起作用。
我还从我的Java代码中运行"chmod +x"这样的命令,这些命令可以正常运行。 我的原始命令看起来像这样:
runCommand = "echo" + " " + password + "| sudo -S " + "\"" + a.getAbsolutePath() + "\"" + " --deploymentFile="
+ "\"" + b.getAbsolutePath() + "\"";
其中a.getAbsolutePath()是安装程序文件的路径,b.getAbsolutePath()是我们用来安装应用程序的部署文件的路径。
pb.getInputStream()
打印出命令,当我将其复制并粘贴到终端中时,它可以正常运行。
pb.getErrorStream()
不返回任何内容。
我尝试运行
String[] cmd = {"/bin/bash","-c","echo tester| sudo -S ","\"",a.getAbsolutePath(),"\"","\""," --deploymentFile=","\"",b.getAbsolutePath()};
和
String[] cmd = {"/bin/bash","-c","echo tester| sudo -S",a.getAbsolutePath(),"--deploymentFile=","\"",b.getAbsolutePath()};
这里我得到了以下错误
getErrorStreamusage: sudo -h | -K | -k | -L | -V
getErrorStreamusage: sudo -v [-AknS] [-g groupname|#gid] [-p prompt] [-u user name|#uid]
getErrorStreamusage: sudo -l[l] [-AknS] [-g groupname|#gid] [-p prompt] [-U user name] [-u
getErrorStream user name|#uid] [-g groupname|#gid] [command]
getErrorStreamusage: sudo [-AbEHknPS] [-C fd] [-g groupname|#gid] [-p prompt] [-u user
getErrorStream name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s] [<command>]
getErrorStreamusage: sudo -e [-AknS] [-C fd] [-g groupname|#gid] [-p prompt] [-u user
getErrorStream name|#uid] file ...
echo tester
?而且,-S
不是必需的:一个简单的sudo open -a safari
就足够了。 - fedorquitester
是密码,将其echo
出来可能不是最安全的想法... - Arc676