gpt4 book ai didi

java - 在 Mac OS X 上通过 java 程序使用命令写入文件

转载 作者:行者123 更新时间:2023-11-30 07:44:05 26 4
gpt4 key购买 nike

我正在尝试使用类似 echo 的命令将变量写入 ~/.bash_profile,但我无法将其写入文件。我尝试了以下,

Runtime run = Runtime.getRuntime();
String line = null;
try {
Process pr = run.exec("echo \"export ANDROID_HOME=/Users/abc/Documents/platform-tool\" >> ~/.bash_profile");
pr.waitFor();
BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
while ((line = buf.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
logger.error("Error occurred when getting adb " + e.getMessage());
} catch (InterruptedException ie) {
logger.error("Error occurred when getting adb " + ie.getMessage());
Thread.currentThread().interrupt();
}

我也试过给 ' 而不是\"并且只是 echo export 仍然没有写入那个文件。当我尝试打印它打印的输出时

"export ANDROID_HOME=/Users/abc/Documents/platform-tool" >> ~/.bash_profile

但是文件是空的。

我也试过使用 printf,但还是不行。这些命令也可以在终端中使用,但在 java 中使用时,它不会写入文件。

如有任何帮助,我们将不胜感激,如果还有其他我正在使用的方法,请提出建议

最佳答案

当您在终端中执行 echo foo >> bar 时,有两个重要的区别:

  • echo 是内置的 bash 命令(相对于 /bin/bash 可以在 PATH) - 但这不是很重要,因为两者的行为相同;和

  • >>>bash 处理,不会作为参数提供给 echo 进行打印。 bash 负责解析命令行、处理重定向以及处理变量替换等一系列其他事情。在这种情况下,Java 解析命令行,并将它们直接交给程序。

所以本质上,您正在执行:

'/bin/echo' '"export ANDROID_HOME=/Users/abc/Documents/platform-tool\"' '>>' '~/.bash_profile'

如果您在终端中尝试那个,它会执行与您的 Java 调用的 echo 相同的操作。

为了做你想做的事,你需要运行一个 shell(例如 bash)来处理重定向:

run.exec("bash -c 'echo \"export ANDROID_HOME=/Users/abc/Documents/platform-tool\" >> ~/.bash_profile'")

然而,这里自然要提出一个问题 - 为什么要使用 Java 调用 bash 来调用 echo...? 为什么不直接使用 Java? ( How to append text to an existing file in Java )

关于java - 在 Mac OS X 上通过 java 程序使用命令写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52828991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com