无法通过使用 java 执行 shell 脚本来创建文件夹
Unable to create a folder by executing a shell script using java
我试图使用 java 代码执行 shell 脚本。以下是演示该问题的示例代码:
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("/home/otaku/Programming/data/test1.sh");
try {
Process process = processBuilder.start();
StringBuilder output = new StringBuilder();
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
}
int exitVal = process.waitFor();
if (exitVal == 0) {
System.out.println(output);
} else {
System.out.println("Script exited abnormally");
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
我正在尝试执行的 shell 脚本文件 test1.sh :
#!/bin/bash
mkdir -p -- teeh
echo 'Succesfully executed script'
我收到回显消息并且能够在 java 控制台中打印,表明 shell 脚本已成功执行。但是即使执行命令 mkdir -p --teeh 也没有创建目录。如果我使用终端手动执行脚本文件,它就像一个魅力。我想知道这背后的原因以及可能的解决方案。
mkdir -p -- teeh
在此命令中,teeh
路径是相对路径而不是绝对路径:它将在脚本的当前工作目录中创建。
您的 bash
脚本默认在 JVM 的工作目录下执行,这取决于您从何处执行 java 应用程序。如果您从 IDE 执行代码,默认情况下这将是项目的根目录。如果您从命令行执行,它将是您执行 java
命令的目录。
在任何情况下,除非您 运行 来自 /home/otaku/Programming/data/
目录的 java 应用程序,否则您不应期望由当前代码创建 /home/otaku/Programming/data/teeh
目录。
有许多可能的解决方案,其相关性取决于您的上下文:
- 执行
/home/otaku/Programming/data/
目录中的 java 代码
- 在您的
bash
脚本中使用绝对路径
- 在您的
bash
脚本中使用 cd
- 使用
ProcessBuilder.directory(File dir)
在适当的工作目录下执行bash
脚本
我试图使用 java 代码执行 shell 脚本。以下是演示该问题的示例代码:
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("/home/otaku/Programming/data/test1.sh");
try {
Process process = processBuilder.start();
StringBuilder output = new StringBuilder();
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
}
int exitVal = process.waitFor();
if (exitVal == 0) {
System.out.println(output);
} else {
System.out.println("Script exited abnormally");
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
我正在尝试执行的 shell 脚本文件 test1.sh :
#!/bin/bash
mkdir -p -- teeh
echo 'Succesfully executed script'
我收到回显消息并且能够在 java 控制台中打印,表明 shell 脚本已成功执行。但是即使执行命令 mkdir -p --teeh 也没有创建目录。如果我使用终端手动执行脚本文件,它就像一个魅力。我想知道这背后的原因以及可能的解决方案。
mkdir -p -- teeh
在此命令中,teeh
路径是相对路径而不是绝对路径:它将在脚本的当前工作目录中创建。
您的 bash
脚本默认在 JVM 的工作目录下执行,这取决于您从何处执行 java 应用程序。如果您从 IDE 执行代码,默认情况下这将是项目的根目录。如果您从命令行执行,它将是您执行 java
命令的目录。
在任何情况下,除非您 运行 来自 /home/otaku/Programming/data/
目录的 java 应用程序,否则您不应期望由当前代码创建 /home/otaku/Programming/data/teeh
目录。
有许多可能的解决方案,其相关性取决于您的上下文:
- 执行
/home/otaku/Programming/data/
目录中的 java 代码 - 在您的
bash
脚本中使用绝对路径 - 在您的
bash
脚本中使用cd
- 使用
ProcessBuilder.directory(File dir)
在适当的工作目录下执行bash
脚本