这是给人的ls
只是输出:从Java程序运行系统命令有问题:
String[] cmd={"bash","-c","ls","-l"}:
ProcessBuilder pb=new ProcessBuilder(cmd);
尽管这是给长的正确列表输出:
String[] cmd={"bash","-c","ls -l"};
这是给人的ls
只是输出:从Java程序运行系统命令有问题:
String[] cmd={"bash","-c","ls","-l"}:
ProcessBuilder pb=new ProcessBuilder(cmd);
尽管这是给长的正确列表输出:
String[] cmd={"bash","-c","ls -l"};
在第一代码片段,-l
选项被作为参数传递给bash,而不是ls。 Bash将-l
选项解释为指定它应该表现为“登录”shell。
-c
之后的参数应该包含您想要执行的整个bash脚本(包含空格),所以第二个代码片段是正确的。
哦,好吧。谢谢。但是如果我想使用cat命令动态显示文件呢?一个示例场景是当我想在循环中传递文件名以进行显示时。 – HelloWorld 2012-01-27 16:26:28
如果你想用多个参数调用'cat',那么你可以使用一个StringBuilder和'for'循环来将命令行建立成单个字符串(文件名之间有空格)。它可以附加到字符串“cat”上,并用于'-c'后面的命令行参数。 – 2012-01-27 16:34:30
非常感谢您的帮助。 – HelloWorld 2012-01-27 16:42:33
前者传递两个选项标志,以bash
:-c
用争论ls
,和-l
根据手册页引起bash
充当登录shell。
第二个通过一个选项标志-c
,其中参数ls -l
作为单个字符串。
哦,好的。谢谢。但是如果我想使用cat命令动态显示文件呢?一个示例场景是当我想在循环中传递文件名以进行显示时 – HelloWorld 2012-01-27 16:28:40
String[] cmd={"bash","-c","ls -l"}:
ProcessBuilder pb=new ProcessBuilder(cmd);
的arguements都打坏,所以如果你想要的bash到interpert您通过“庆典”,“命令”,“-c”,... 那么下一个项目需要在您的整个命令,又名“ls -l”。
然后Bash将解析“命令”,并将-l作为参数发送给“ls”。目前它是“bash”的参数,这就是为什么你没有得到你想要的结果。
而你的问题是? – Tudor 2012-01-27 16:16:58
在Windows XP上运行。如果这很重要。 谢谢 – HelloWorld 2012-01-27 16:17:22
我想知道为什么它没有给出我提到的第一种方式的输出。输出应该是一个长列表。 – HelloWorld 2012-01-27 16:18:46