无法在linux中运行简单的bash命令,权限被拒绝

时间:2015-12-16 02:32:46

标签: java bash

我正在尝试使用此

从控制台运行一个简单的命令
public void execute(File file, String... command){

    Process p = null;
    ProcessBuilder builder = new ProcessBuilder("ls");
    builder.directory(file.getAbsoluteFile());
    builder.redirectErrorStream(true);

    try {
        p = builder.start();
    } catch (IOException e) {
        LOGGER.error("", e);
    }
}

但它一直说我不能运行ls,许可被拒绝。这里有缺失的步骤吗?

由于

3 个答案:

答案 0 :(得分:1)

这取决于以下几点: 1)运行java的用户(您的进程将以该用户身份运行) 2)JAR或类所在的目录。

如果java用户与您登录的用户不同,请确保您的帐户具有适当的权限。

答案 1 :(得分:1)

您应该使用命令和标志分别传递给ProcessBuilder的构造函数(根据the docs):

public void execute(File file, String... command) {

    ProcessBuilder builder = new ProcessBuilder("ls", "-l");
    builder.directory(file.getAbsoluteFile());
    builder.redirectErrorStream(true);

    try {
        Process p = builder.start();
    } catch (IOException e) {
        LOGGER.error("", e);
    }
}

但是,您似乎想要执行command。为此,您可以将command传递给ProcessBuilder的构造函数。

public void execute(File file, String... command) {

    ProcessBuilder builder = new ProcessBuilder(command);
    builder.directory(file.getAbsoluteFile());
    builder.redirectErrorStream(true);

    try {
        Process p = builder.start();
    } catch (IOException e) {
        LOGGER.error("", e);
    }
}

这里是工作代码的ideone

您会注意到when I run it with "ls -l",执行命令时出现问题。这是因为第一个参数被视为要执行的命令,其余参数被视为标志。

要更改EC2实例中bash命令的权限,请执行

chmod u+x /home/admin/ec2-api-tools-*/bin/*

答案 2 :(得分:1)

ProcessBuilder builder = new ProcessBuilder("ls -l");

没有名为" ls -l"的流程。您想使用名为" ls"使用参数" -l",为此你需要:

ProcessBuilder builder = new ProcessBuilder("ls", "-l");