2014-07-13 51 views
1

我有一個文件,每行包含兩個字符串,這兩個字符串是從shell啓動命令(phantomjs)的兩個參數。我會使用GNU parallel來爲每一行啓動我的命令。現在,如果我手動啓動,我寫:從文件中讀取兩個參數的啓動命令(phantomjs)

./phantomjs rasterize.js http://www.google.it/ google.png 

和一切正常。但是,如果我試圖用平行,不順心的事:

parallel --verbose -a myfile --no-run-if-empty ./phantomjs rasterize.js 

這是輸出

./phantomjs rasterize.js http://www.google.it/\ google.png 
./phantomjs rasterize.js http://www.anothersite.it/\ pic.png 
Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom] 
    paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter" 
Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom] 
    paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter" 

,我不明白爲什麼它不工作,爲什麼在詳細模式下(前兩排)鏈接後有\字符。

貓-vet輸出:

http://www.google.it/ google.png$ 
http://www.anothersite.it/ pic.png$ 
$ 
$ 
+0

這是相當困難與所有那些長路徑進行調試,試符號鏈接他們...'LN -s ./phantomjs-1.9.7-linux-i686/bin/phantomjs phantomjs'還有'ln -s phantomjs-1.9.7-linux-i686/examples/rasterize.js rasterize.js' –

+0

已編輯。現在路徑更小 – giozh

+0

你的文件'myfile'中是否有一些奇怪的字符?你能運行'cat -vet myfile'並將輸出粘貼到你的問題中嗎? –

回答

2

你是相當接近與why in verbose mode (first two row) after link there's "\" character?

GNU並行對待每行作爲一個參數的答案,將引用任何特殊字符(如空格)。這就是你所看到的。這是一個功能 - 不是bug。這意味着你在單行上放置的任何東西都會在shell中正確引用。

但是你不想要默認行爲。你想要GNU Parallel把這條線分成2個參數。你列分隔符是空間:

parallel --verbose -a myfile --colsep ' ' --no-run-if-empty ./phantomjs rasterize.js 
+0

謝謝,它的工作原理。你救了我的一天! – giozh