从java程序运行系统命令时出现问题:

从java程序运行系统命令时出现问题:,java,Java,这只是给出了ls的输出: String[] cmd={"bash","-c","ls","-l"}: ProcessBuilder pb=new ProcessBuilder(cmd); 鉴于这是正确地给出长列表输出: String[] cmd={"bash","-c","ls -l"}; 在第一个代码段中,-l选项作为参数传递给bash,而不是ls。Bash将-l选项解释为指定它应该作为“login”shell -c后面的参数应该包括您想要执行的整个bash脚本(包括空格),因此第二个

这只是给出了
ls
的输出:

String[] cmd={"bash","-c","ls","-l"}:  
ProcessBuilder pb=new ProcessBuilder(cmd);
鉴于这是正确地给出长列表输出:

String[] cmd={"bash","-c","ls -l"};

在第一个代码段中,
-l
选项作为参数传递给bash,而不是ls。Bash将
-l
选项解释为指定它应该作为“login”shell


-c
后面的参数应该包括您想要执行的整个bash脚本(包括空格),因此第二个代码段是正确的。

前者将两个选项标志传递给
bash
-c
带参数
ls
,和
-l
,根据手册页,它使
bash
充当登录shell

第二个传递一个选项标志
-c
,该标志将参数
ls-l
作为单个字符串

String[] cmd={"bash","-c","ls -l"}:  
ProcessBuilder pb=new ProcessBuilder(cmd);
争论的焦点是bash,因此如果希望bash通过“bash”、“-c”、。。。 然后下一项需要是整个命令,也就是“ls-l”


然后Bash将解析“command”并将-l作为参数发送到“ls”。目前,它是“bash”的一个参数,这就是为什么在Windows XP上运行时无法获得所需的结果。

。如果这很重要的话。谢谢,我想知道为什么我提到的第一种方法没有给出输出。输出应该是一个很长的列表。第一个示例,您使用bash解析命令行。试试
{“ls”,“-l”}
哦,好的。非常感谢。但如果我想使用cat命令动态显示文件呢。一个示例场景是,当我想在循环中传递文件名以供显示时。哦,好的。非常感谢。但如果我想使用cat命令动态显示文件呢。例如,我希望在循环中传递文件名以供显示。如果希望使用多个参数调用一次
cat
,则可以使用StringBuilder和
for
循环将命令行构建为单个字符串(文件名之间有空格)。这可以附加到字符串
“cat”
,并用于
-c
后面的命令行参数。哦,好的。非常感谢。但如果我想使用cat命令动态显示文件呢。例如,当我想在循环中传递文件名以供显示时