Primeiro, você precisa citar os cifrões que devem ser interpretados pelo shell. Como é, $x
e $(dirname $x)
e $(basename $x)
são analisados por make. Você também está perdendo um ponto-e-vírgula no final do corpo do loop while. Verifique a saída de execução make, você deve ver o shell reclamando sobre isso.
find $(W)/$(OVE) -name "*.xml" -print | \
while read x ; do \
cat $$x | /opt/exp/bin/python2.7 process_results.py > $(W)/$(OVE)/$$(dirname $$x)_$$(basename $$x).xml; \
done
Outro provável problema é que $(dirname $x)
já contém a parte $(W)/$(OVE)
. Por exemplo, se $(W)
for foo
e $(OVE)
for bar
e $x
for subdir/subsubdir/wibble.xml
, você acabará tentando gravar arquivos como foo/bar/foo/bar/subdir/subsubdir_wibble.xml.xml
, enquanto provavelmente você vai querer escrever foo/bar/foo/bar/subdir/subsubdir_wibble.xml.xml
. Também é estranho que você esteja transformando um arquivo .xml
em um arquivo .xml.xml
. Se você quisesse remover a extensão .xml
original, precisará escrever basename $$x .xml
, mas é inútil remover a extensão apenas para adicioná-la novamente. Então você provavelmente quis escrever:
find $(W)/$(OVE) -name "*.xml" -print | \
while read x ; do \
/opt/exp/bin/python2.7 process_results.py <$$x >$$(dirname $$x)_$$(basename $$x); \
done
Um outro problema é que, se qualquer uma das execuções de process_results.py
falhar, o make continuará sendo executado e ainda relatará uma compilação bem-sucedida. Diga ao shell para parar se ocorrer um erro:
set -e; \
find $(W)/$(OVE) -name "*.xml" -print | \
while read x ; do \
/opt/exp/bin/python2.7 process_results.py <$$x >$$(dirname $$x)_$$(basename $$x); \
done