2012-02-17 4 views
0

У меня есть задача разобрать файлы в подкаталоге определенных условиях, а затем выполнить что-то, так что у меня есть код, который отлично работает и выглядит следующим образом:Использование тест внутри xargs

cat FILENAME | grep -qe 'condition'; \ 
    test $? -ne 0 && echo -ne '\n add condition to file \n'>>FILENAME 

Но, когда я пытаюсь использовать это в xargs заявлении у меня есть некоторые проблемы:

git grep -e "condition" | awk -F : 'BEGIN {} { print $1 } END {}'| sort| uniq |\ 
    xargs -I {} -i bash -c "cp {} {}.updated; echo -ne 'Processing: {}\n'; \ 
    cat {}.updated | grep -qe 'condition'; \ 
    test $? -ne 0 && echo -ne '\n add condition\n' >>{}.updated; \ 
    mv {} {}.backup; mv {}.updated {}; echo -ne ' End\n';" 

Проблема, что test $? -ne 0 внутри xargs всегда оценивает как истинные, Despites фактического результата Grep.

+2

'cat file | условие grep -qe; тест $? -ne 0 && 'сумасшедший. Вместо этого используйте 'grep -qe файл условия &&'. – Sorpigal

+0

Спасибо, я использовал это, но когда моя команда не работала, я начал экспериментировать с этим. – Vestel

ответ

3

Попробуйте изменить $? to \ $?

Возможно, Bash оценивает $? преждевременно

+0

Или просто одинарная кавычка строка сценария, переданная в '-c'. – Sorpigal

Смежные вопросы