2017-01-01 3 views
0

におけるパイプawkコマンドを見つける分析::メイクの仕事は、私は、これはPythonコードを取得するにはawkの行を見つけていたMakefile

$ find ./ -name '*.py' -exec wc -l {} \; | sort -n| awk '{print $0}{s+=$0}END{print s}' 
12 ./gb/__init__.py 
23 ./gb/value_type.py 
40 ./setup.py 
120 ./gb/libcsv.py 
200 
$ 

私はMakefileの中にそれを入れてみてください::

$ cat Makefile 
python_count_lines: clean 
    @find ./ -name '*.py' -exec wc -l {} \; | sort -n| awk '{print \$0}{s+=\$0}END{print s}' 

しかし、このうまくいかない::

答えて

2

Bertrand Martelは、ドル記号を倍にしてドル記号をエスケープする必要がありますスラッシュ(info here参照)。

しかし、その提案の残りの部分は正しくなく、動作しません。まず、shell関数をレシピで使用することはほとんどありません。第2行目ではinfo関数を使用することはできません。最初の行でシェル変数をRESに等しい値に設定した場合、変数RESを2行目に印刷しようとします。それだけでなく、各行は別々のシェルで実行され、レシピのいずれかの部分がシェルに渡される前に、すべてのmake変数と関数参照が展開されます。

あなただけのこれを実行する必要があります。

python_count_lines: clean 
     @find ./ -name '*.py' -exec wc -l {} \; | sort -n| awk '{print $$0}{s+=$$0}END{print s}' 
+0

あなたは正しいです、私は私はそれが働いていたと思う製のいくつかのタブの問題がありました –

関連する問題