gpt4 book ai didi

java - ProcessBuilder 执行字符串列表中的一个命令,但不执行下一个命令。

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

我是编程新手。我为 ProcessBuilder 创建了一个字符串列表。 ProcessBuilder 正在执行字符串列表中的一个命令(并成功写入我要求写入的文件),但不执行下一个字符串命令。这是代码:

List<String> vsArrays = new ArrayList<String>();
vsArrays.add("/bin/sh");
vsArrays.add("-c");
vsArrays.add("echo '123' > ~/1.rad");
vsArrays.add("echo '123' > ~/2.rad");
vsArrays.add("echo '123' > ~/3.rad");

for (String s : vsArrays){
system.out.println(s);
}

ProcessBuilder proc = new ProcessBuilder(vsArrays);
Process start = proc.start();
start.waitFor();

第一个文件(名为 1.rad)是在主 (~) 目录中创建的,但以下文件不是。虽然我设法通过使用文件中的redirectInput 来执行接下来的命令(并写入其他文件),但我不想为redirectInput 创建单独的文件。您能否回答为什么下一个命令(来自字符串列表)没有被执行?谢谢!

最佳答案

ProcessBuilder 从来就不是为了执行多个命令。 List 的条目被视为参数,并且调用的程序 sh 由于 -c 选项而执行一个参数。因此,sh 命令和 -c 选项“决定”将一个参数(而且只有一个)解释为启动命令。但是 bash 将运行作为单个参数提供的多个命令,并用 ; 分隔。

List<String> vsArrays = new ArrayList<String>();
vsArrays.add("/bin/sh");
vsArrays.add("-c");
vsArrays.add("echo '123' > ~/1.rad; echo '123' > ~/2.rad; echo '123' > ~/3.rad");

ProcessBuilder proc = new ProcessBuilder(vsArrays);
Process start = proc.start();
start.waitFor();

关于java - ProcessBuilder 执行字符串列表中的一个命令,但不执行下一个命令。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20407055/

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