我正在尝试使用它从控制台运行一个简单的命令
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/