2013-02-25 9 views
6

Mam następujący fragment kodu w pliku Makefile, który zawsze kończy się niepowodzeniem, chyba że usunę odwołania do sed & grep poniżej.Jak używać potoków w komendzie makefile?

TAB=$(shell printf "\t") 
all: abstract.tsv 
     $(shell cut -d "${TAB}" -f 3 abstract.tsv | sed "s/^\s*//" | \ 
     sed "s/\s*$//" | grep -v "^\s*$" | sort -f -S 300M | \ 
     uniq > referenced_images.sorted.tsv) 

ten błąd pojawia się:

/bin/bash: -c: line 0: unexpected EOF while looking for matching `"' 
/bin/bash: -c: line 1: syntax error: unexpected end of file 

Co może być nie tak?

+1

Prawdopodobnie jest to duplikat http://stackoverflow.com/questions/2382764/escaping-in-makefile –

+1

Po prostu FYI, dwie inwokacje sed i jedną z grep można połączyć w jedną instancję sed: 'sed -ne '/^\ s * $$ /! {s/^ \ s * //; s/\ s * $$ //; p;}' 'Początkowy wzorzec zachowuje tylko odstępy, a puste linie są modyfikowane lub wystawiany. (Podwajałem też $ s dla korzyści z make, oczywiście.) – William

Odpowiedz

17

Jeden błąd pochodzi z sed. Kiedy piszesz:

sed "s/\s*$//" 

make rozszerza zmiennej $/ na pusty ciąg, więc sed brakuje separatora. Spróbuj:

sed "s/\s*$$//" 

Korzystanie $" powoduje ten sam problem w grep. Zamiast tego użyj grep -v "^\s*$$".

Powiązane problemy