【发布时间】:2023-08-13 11:37:01
【问题描述】:
我有一个无法从 Java 执行的 Linux 命令:
[ ! -d "/tmp/flow" ] && echo "The directory DOES NOT exist."
它在命令行中运行良好,但是当我使用以下代码时:
String command = "[ ! -d \"/tmp/flow\" ] && echo \"The directory DOES NOT exist.\"";
Process proc = Runtime.getRuntime().exec(command);
Boolean successful = proc.waitFor()==0 && proc.exitValue()==0;
System.out.println("successful:"+successful);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
String line = null;
System.out.println("************** input");
while ((line = stdInput.readLine()) != null) {
System.out.println(line);
}
System.out.println("************** error");
while ((line = stdError.readLine()) != null) {
System.out.println(line);
}
它是这么说的
successful:false
************** input
************** error
[: missing ']'
有什么想法吗?是否有可能无法从 Java 调用这些 IF bash 运算符...?
谢谢!
**************** UDATE ****************
vikhor@adnlt653-vm1:~> which '['
[ is a shell builtin
[ is /usr/bin/[
[ is /bin/[
【问题讨论】:
-
您是否在尝试执行提及命令的同一框中。如果外面尝试使用 jsch 或任何其他 libaray
-
我认为 Linux 上没有一个名为“[”的可执行文件可以满足您的需求。您真的要使用外部命令检查某个目录是否存在吗?
-
嗨@spandey15,是的,我在同一个主机上。
-
嗨@GyroGearless,基本上它是一个IF运算符,它会尝试检查文件夹是否存在。它在命令行中运行良好。通常用于 bash 脚本中。
-
Boolean successful = proc.waitFor()==0 && proc.exitValue()==0;如果您刚刚检查了waitFor()的返回,则无需检查exitValue(),因为它们将是相同的。打印实际的 int 值,而不是创建布尔对象。