从java程序运行系统命令时遇到问题:

时间:2012-01-27 16:15:35

标签: java

这只是ls的输出:

String[] cmd={"bash","-c","ls","-l"}:  
ProcessBuilder pb=new ProcessBuilder(cmd);

这样可以正确地提供长列表输出:

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

前者将两个选项标记传递给bash-c参数ls-l根据联机帮助页导致bash充当登录shell。

第二个传递一个选项标志-c,其中参数ls -l为单个字符串。

答案 2 :(得分:0)

String[] cmd={"bash","-c","ls -l"}:  
ProcessBuilder pb=new ProcessBuilder(cmd);

争论是打击,所以如果你想让bash通过“bash”,“ - c”来填充你的“命令”,...... 然后下一个项目需要是你的整个命令,也就是“ls -l”。

然后Bash会解析“命令”,-l将作为参数发送给“ls”。目前它是“bash”的参数,这就是为什么你没有得到你想要的结果。