2011-11-22 15 views
6

Tôi cần phải chuyển một số văn bản bao gồm khoảng trắng và các ký tự khác vào một tập lệnh đang được chạy bởi GNU Parallel.Làm thế nào để chuyển args trích dẫn đến GNU Parallel

Dưới đây là một ví dụ rất đơn giản:

$ seq 1 3 | parallel echo "Quoted ' (text)" 

Ví dụ trên sẽ ra này:

sh: -c: line 0: unexpected EOF while looking for matching `'' 
sh: -c: line 1: syntax error: unexpected end of file 
sh: -c: line 0: unexpected EOF while looking for matching `'' 
sh: -c: line 1: syntax error: unexpected end of file 
sh: -c: line 0: unexpected EOF while looking for matching `'' 
sh: -c: line 1: syntax error: unexpected end of file  

Tuy nhiên, nếu tôi làm tất cả mọi thứ này hoạt động:

seq 1 3 | parallel echo "\"Quoted ' (text)\"" 

tôi xảy ra để chạy điều này từ kịch bản lệnh python, vì vậy trước khi chuyển các đối số, tôi sẽ trích dẫn chúng trong kịch bản lệnh như lần thứ hai là:

args = ["Some arg", "Another arg", "etc."] 
args = ' '.join(pipes.quote(pipes.quote(arg)) for arg in args) 

Nhưng dường như nó không phải là giải pháp sạch.

Có ai biết cách nào tốt hơn để chuyển đối số cho GNU Parallel không?

Cảm ơn!

+0

'không phải là giải pháp sạch', nhưng nó có hoạt động không? Chúc may mắn. – shellter

Trả lời

8
zsh-4.3.12[sysadmin]% print -l {1..3} | 
    parallel -q echo "Quoted ' (text)" 
Quoted ' (text) 1 
Quoted ' (text) 2 
Quoted ' (text) 3 
+1

Cảm ơn bạn! Tôi nhìn trang người đàn ông cho một cái gì đó rất đơn giản nhưng không thể tìm thấy. Cảm ơn bạn đã trả lời rõ ràng và không nói điều gì đó như "Đọc trang người đàn ông!" Quá dễ. – chaimp

+1

Để làm cho điều này rõ ràng hơn một chút: Các đối số được truyền cho các lệnh thông qua song song được mở rộng bởi trình bao hai lần: một lần trong lời gọi song song và một lần khi song song chạy lệnh của bạn. '-q' ngăn chặn việc mở rộng shell thứ hai. – mortehu

6

Có một phần toàn bộ nằm trong man page dành riêng cho trích dẫn:

http://www.gnu.org/s/parallel/man.html#QUOTING

Nó thậm chí đề cập đến các thông báo lỗi rất bạn viết trong câu hỏi của bạn.

Nếu bạn có thể viết tốt hơn, vui lòng gửi email phiên bản của bạn tới: [email protected]

Các vấn đề liên quan