这只是ls
的输出:
String[] cmd={"bash","-c","ls","-l"}:
ProcessBuilder pb=new ProcessBuilder(cmd);
这样可以正确地提供长列表输出:
String[] cmd={"bash","-c","ls -l"};
答案 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”的参数,这就是为什么你没有得到你想要的结果。