【发布时间】:2021-10-20 00:27:00
【问题描述】:
我对 Java 还是很陌生,目前正在努力用 Java 执行 linux 命令。
在单个进程中,我想执行一个touch txt命令,让进程生成器等待一秒钟然后在同一个进程中,删除txt文件。
我目前的代码如下
public void Shell(){
try {
File dir = new File("/Users/yhlee/Documents");
ProcessBuilder pb = new ProcessBuilder(new String[]{"/bin/bash", "-c", "touch commandTest.txt"});
pb.directory(dir);
Process start = pb.start();
log.info("shell succeeded");
}catch (Exception e){
e.printStackTrace();
log.info("Error.Running.CMD");
}
我在编写 txt 文件之后被卡住了,任何形式的建议都会非常感谢!
【问题讨论】:
-
您可以随时change the ProcessBuilder’s command 并从中创建另一个进程。
-
为此使用 ProcessBuilder 会使代码变得缓慢且脆弱,但如果您仍然想要,可以将
"touch commandTest.txt"替换为"touch commandTest.txt; sleep 1; rm commandTest.txt" -
@thatotherguy 非常感谢您的方法似乎有效。您是否有机会知道如何根据函数的输入值使 ProcessBuilder 输出一个 txt 文件。例如,如果它是 public void Shell(String fileName) 并且 ProcessBuilder 写入和删除 fileName.txt 而不是 commandTest.txt。
-
@Adam 您可以将文件名作为单独的参数传递,并在 shell 命令中使用
"$1"来引用它。例如,new String[]{"/bin/bash", "-c", "touch \"$1\"; ...", "_", fileName + ".txt"} -
@thatotherguy 非常感谢!!你是最棒的!!
标签: java linux processbuilder