2011-11-22 9 views
6

GNU Parallelによって実行されているスクリプトに、空白やその他の文字を含むテキストを渡す必要があります。ここで 引用符で囲まれたargsをGNU Parallelに渡す方法

は非常に単純な例です:

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

上記の例の出力は以下となり、これは私がしなければ

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  

しかし、このすべてが動作します:

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

私が起こりますPythonスクリプトからこれを実行するため、引数を渡す前に、私はスクリプトの中でそれらを二重引用符で囲んでいます次のとおりです。

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

しかし、それはきれいな解決策のようではありません。

誰かがGNU Parallelに引数を渡すより良い方法を知っていますか?

ありがとうございます!

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

それも、あなたがあなたの質問に書き込み非常にエラーメッセージが言及:

+0

「きれいな解決策ではありませんが、問題なく動作しますか?がんばろう。 – shellter

答えて

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

ありがとうございました!とてもシンプルだが、見つけられない何かのマニュアルページを見た。 「マンページを読んでください!」というようなことを言ってはいけません。とても簡単。 – chaimp

+1

これを少し明確にするには:パラレルを介してコマンドに渡される引数は、シェルによって2回展開されます.1回はパラレルの呼び出しで、もう1回はパラレルでコマンドを実行します。 '-q'は2番目のシェル拡張を防ぎます。 – mortehu

6

引用専用のmanページで全体のセクションがあります。

あなたがそれをよりよく書くことができるならば、あなたのバージョンを[email protected]にメールしてください。

関連する問題