2017-04-21 29 views
1

請考慮以下Make規則。'awk'中與'並行'一起使用的Makefile中的列號

output.txt: input-*.txt 
    parallel -j 16 'echo {} | awk "{print $$0}"' ::: $^ 

問題是在awk中指定列號(或任何美元變量)。如果awk命令正好在Makefile中(即沒有提供給並行),它將起作用,但是當它用作並行的參數時,它不起作用。

以下變化也不起作用。

parallel -j 16 'echo {} | awk "{print \$0}"' ::: $^ 

有人能幫我解決這個問題嗎?

回答

1

Make不關心反斜槓或引號。唯一需要注意的字符是$,唯一的辦法是將它翻一番:$$。如果使用$$0不起作用,則問題不在於make,而是與您的shell和/或並行。

你應該做的是在shell提示符下運行該命令,並使其在任何轉義狀態下工作,而不必擔心任何轉義。

一旦您的shell提示已正確轉義規則,您可以將其剪切並粘貼到makefile配方中,並將所有$字符替換爲$$,它將起作用。

看看並行手冊頁,它看起來像你使用的命令不能是一個內聯腳本,這可能是你的版本不起作用。它顯然必須是一個實際的命令。也許如果你使用/bin/sh -c "echo ..."而不是它會工作?