2014-07-13 48 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