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

我已经尝试了几十种变化,但没有任何效果......

4

2 回答 2

3

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

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

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

更新

已提交增强请求JDK-8049300

于 2014-07-03T16:12:44.777 回答
0

尝试

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

那对你有用吗?(如果您将行括在反引号中,则在 Windows 上确实如此)。

于 2014-07-03T11:17:23.063 回答