Использование теста внутри xargs - PullRequest
1 голос
/ 17 февраля 2012

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

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 всегда оценивается как true, несмотря на фактический результат grep.

1 Ответ

3 голосов
/ 17 февраля 2012

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

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

...