$EXEC('xargs ls',-6ren">
gpt4 book ai didi

javascript - Java 8 Nashorn 空白问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:01:06 25 4
gpt4 key购买 nike

更新:

我有一个可行的粗略解决方案,但我不喜欢它:

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

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

最佳答案

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

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

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

更新

增强请求 JDK-8049300归档。

关于javascript - Java 8 Nashorn 空白问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24543680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com