更新:
我有一个有效的解决方案,但我不喜欢它:
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
我尝试过几十种变化而且没有任何作用......
答案 0 :(得分:3)
不幸的是,它看起来像是用于调用系统命令的反引号语法(以及执行相同操作的$EXEC
函数)错误处理包含空格的参数。
源代码位于ScriptingFunctions.java文件的exec
函数中。不幸的是,它使用普通的StringTokenizer
将字符串拆分为一个参数字符串数组,然后传递给ProcessBuilder
。这意味着不考虑空格,引号,反斜杠等。
我说这是一个错误。应该有一种方法可以将一个参数数组直接传递给$EXEC
,而不是让它将字符串解析为参数,但是我不知道它。
<强>更新强>
提交的增强请求JDK-8049300。
答案 1 :(得分:0)
尝试
ls \"/Users/XXXXX/Desktop/TEST DIR\"
这对你有用吗? (如果你将行括在后面的刻度线中,它会在Windows上运行。)