Java 8 Nashorn空白问题

时间:2014-07-03 01:39:47

标签: javascript java-8 nashorn

更新:

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

JJS> NANO_HOME ='“/ Users / XXXXXX / Desktop / TEST DIR”'; JJS> $ EXEC('xargs ls',“$ {NANO_HOME}”);


我正在使用Java 8 Nashorn来做一些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

我尝试过几十种变化而且没有任何作用......

2 个答案:

答案 0 :(得分:3)

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

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

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

<强>更新

提交的增强请求JDK-8049300

答案 1 :(得分:0)

尝试

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

这对你有用吗? (如果你将行括在后面的刻度线中,它会在Windows上运行。)