2011-11-22 14 views
6

Muszę przekazać tekst zawierający białe spacje i inne znaki do skryptu, który jest uruchamiany przez GNU Parallel.Jak przekazywać cytowane argumenty do GNU Równoległe

Tutaj jest bardzo prosty przykład:

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

Powyższy przykład wyświetli to:

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  

Jednakże, jeśli robię to wszystko działa:

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

I stało aby uruchomić to ze skryptu Pythona, więc przed przekazaniem argumentów powołuję je podwójnie w skrypcie takim jak th jest:

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

Ale to nie wydaje się być czystym rozwiązaniem.

Czy ktoś wie o lepszym sposobie przekazywania argumentów do GNU Parallel?

Dzięki!

+0

"Nie jest to czyste rozwiązanie", ale czy to działa? Powodzenia. – shellter

Odpowiedz

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

Dziękujemy! Spojrzałem na stronę podręcznika dla czegoś tak prostego, ale nie mogłem znaleźć. Dziękuję, że odpowiedziałeś tak jasno i nie powiedziałeś czegoś w stylu "Przeczytaj stronę mana!" Tak prosty. – chaimp

+1

Aby uczynić to nieco jaśniejszym: Argumenty przekazane do poleceń przez parametry równoległe są dwukrotnie rozszerzane przez powłokę: raz w wywołaniu równoległym i raz, gdy polecenie równoległe wykonuje polecenie. '-q' zapobiega rozszerzaniu drugiej powłoki. – mortehu

Powiązane problemy