2014-07-03 141 views
4

UPDATE:的Java 8犀牛空白问题

我有一个总的解决方案,工作,但我不喜欢它:

JJS> NANO_HOME =“ “/用户/ XXXXXX /桌面/ TEST DIR” “; jjs> $ EXEC('xargs ls',“$ {NANO_HOME}”);


我使用Java 8犀牛做一些shell脚本,如果目录名包含空格,我在与一个目录列表文件的问题:

$ jjs -scripting 
jjs> `ls /Users/XXXXXX/Desktop/` 
TEST DIR 
jjs> `ls /Users/XXXXXX/Desktop/TEST DIR` 

jjs> $ERR 
ls: /Users/XXXXXX/Desktop/TEST: No such file or directory 
ls: DIR: No such file or directory 

jjs> `ls "/Users/XXXXXX/Desktop/TEST DIR"` 

jjs> $ERR 
ls: "/Users/XXXXXX/Desktop/TEST: No such file or directory 
ls: DIR": No such file or directory 

jjs> `ls /Users/XXXXXX/Desktop/TEST\u0020DIR` 

jjs> $ERR 
ls: /Users/XXXXXX/Desktop/TEST: No such file or directory 
ls: DIR: No such file or directory 

jjs> `ls /Users/XXXXXX/Desktop/TEST\ DIR` 

jjs> $ERR 
ls: /Users/XXXXXX/Desktop/TEST: No such file or directory 
ls: DIR: No such file or directory 

我试着数十变化并没有什么工作的?

+0

您是否尝试过整个字符串的引号?双重转义的空白('\\')? – Bergi

+0

是的,我有,不幸的是没有工作。 – user3799796

+0

注意:反引号真的必须在那里;这就是'jjs'的工作方式。 –

回答

3

不幸的是,它看起来像调用系统命令的反引号语法(以及$EXEC函数,它执行相同的操作)会错误地处理包含空格的参数。

源代码位于ScriptingFunctions.java文件的exec函数中。不幸的是,它使用一个普通的StringTokenizer将字符串拆分为一个参数字符串数组,然后传递给ProcessBuilder。这意味着不考虑空白,引用,反斜杠等等。

我想说这是一个错误。应该有一种方法可以直接将参数数组传递给$EXEC,而不是将字符串解析为参数,但我不知道其中的一个。

UPDATE

增强请求JDK-8049300日提交。

0

尝试

ls \"/Users/XXXXX/Desktop/TEST DIR\" 

这是否对你的工作? (如果你把这行代码放回去,它会在Windows上执行)。