2009-04-24 20 views
22

Làm cách nào để cung cấp các đối số có chứa dấu cách cho phương thức thực thi của chuỗi trong groovy? Chỉ cần thêm dấu cách giống như dấu cách sẽ không được trợ giúp:groovy thực hiện với các tham số có chứa không gian

println 'ls "/tmp/folder with spaces"'.execute().text 

Điều này sẽ đưa ra ba đối số bị hỏng cho cuộc gọi ls.

Trả lời

23

Bí quyết là sử dụng một danh sách:

println(['ls', '/tmp/folder with spaces'].execute().text) 
+1

Trong trường hợp lệnh được tạo động hoặc được yêu cầu người dùng giải pháp này không hoạt động. Chắc chắn không thể phân tích cú pháp quá khó khăn trong việc đếm các dấu ngoặc kép ... – Uberto

-4

bạn đã thử không gian thoát?

println 'ls /tmp/folder\ with\ spaces'.execute().text 
+0

Có, nhưng nó không hoạt động. –

-2

Sử dụng một danh sách cảm thấy một chút thời gian cho tôi.

Điều này sẽ thực hiện công việc:

def exec(act) { 
def cmd = [] 
act.split('"').each { 
    if (it.trim() != "") { cmd += it.trim(); } 
} 
return cmd.execute().text 
} 

println exec('ls "/tmp/folder with spaces"') 

Nhiều ví dụ phức tạp:

println runme('mysql "-uroot" "--execute=CREATE DATABASE TESTDB; USE TESTDB; \\. test.sql"'); 

Nhược điểm duy nhất là sự cần thiết phải đặt dấu ngoặc kép xung quanh tất cả args của bạn, tôi có thể sống với điều đó!

0

Xin lỗi, không có thủ thuật nào ở trên phù hợp với tôi. Đoạn mã khủng khiếp này là thứ duy nhất đi qua:

def command = 'bash ~my_app/bin/job-runner.sh -n " MyJob today_date=20130202 " ' 
    File file = new File("hello.sh") 
    file.delete()  
    file << ("#!/bin/bash\n") 
    file << (command) 
    def proc = "bash hello.sh".execute()     // Call *execute* on the file 
Các vấn đề liên quan