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

标签 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,权限被拒绝。这里有什么遗漏的步骤吗?

谢谢

最佳答案

您应该将命令和标志分别传递给 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 传递给 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/*

关于java - 无法在 Linux 中运行简单的 bash 命令,权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34303011/

相关文章:

java - 为什么在java中位移位对-1不起作用?

java - 动态改变Jfreechart中的Y轴范围

linux - 如何编辑脚本,使变量值包含在撇号内而不需要用户添加撇号?

java - 在运行时重写或修改 Java 类构造函数

java - 如何从登录API改造成功的字符串格式获取数据?

linux - shell脚本重命名文件夹中的文件保持顺序

linux - 使用 awk 解析 nm 命令的输出 - Linux Bash

html - 如何将正则表达式模式匹配转换为小写以进行 URL 标准化/整理

java - Angular - 从 Spring 接收 JSON

php - 如何使用 exec 命令支持 PHP 变量?