Java 8 Nashorn空格问题

4

更新:

我有一种可行但很烦琐的解决方案:

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

我尝试了数十种变化,但都没有用...


你尝试过在整个字符串周围添加引号吗?双重转义的空格 (\\ )? - Bergi
是的,我有,不幸的是那并没有起作用。 - user3799796
注意:反引号必须存在;这是 jjs 工作的方式。 - Stuart Marks
2个回答

3

很不幸,使用反引号语法调用系统命令(以及执行相同功能的$EXEC函数)会处理包含空格的参数出现问题。

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

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

更新

增强请求JDK-8049300已提交。


0

尝试

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

对你有用吗?(如果在行上加上反引号,在Windows上可以工作)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接