2014-07-03 91 views
4

UPDATE:的Java 8犀牛空白問題

我有一個總的解決方案,工作,但我不喜歡它:

JJS> NANO_HOME =「 「/用戶/ XXXXXX /桌面/ TEST DIR」 「; jjs> $ EXEC('xargs ls',「$ {NANO_HOME}」);


我使用Java 8犀牛做一些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

您是否嘗試過整個字符串的引號?雙重轉義的空白('\\')? – Bergi

+0

是的,我有,不幸的是沒有工作。 – user3799796

+0

注意:反引號真的必須在那裏;這就是'jjs'的工作方式。 –

回答

3

不幸的是,它看起來像調用系統命令的反引號語法(以及$EXEC函數,它執行相同的操作)會錯誤地處理包含空格的參數。

源代碼位於ScriptingFunctions.java文件的exec函數中。不幸的是,它使用一個普通的StringTokenizer將字符串拆分爲一個參數字符串數組,然後傳遞給ProcessBuilder。這意味着不考慮空白,引用,反斜槓等等。

我想說這是一個錯誤。應該有一種方法可以直接將參數數組傳遞給$EXEC,而不是將字符串解析爲參數,但我不知道其中的一個。

UPDATE

增強請求JDK-8049300日提交。

0

嘗試

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

這是否對你的工作? (如果你把這行代碼放回去,它會在Windows上執行)。