2012-06-10 2 views
0

У меня есть пример кода, как это:xargs не может получить пользовательский ввод?

CMD="svn up blablabla | grep -v .tgz" 
echo $CMD | xargs -n -P ${PARALLEL:=20} -- bash -c 

цель состоит в том, чтобы запустить обновление Svn параллельно. Однако, когда вы сталкиваетесь с конфликтами, которые должны подсказать несколько вариантов выбора для пользователей, он просто проходит, не дожидаясь ввода пользователя. И отображается ошибка:

Conflict discovered in 'blablabla'. 
Select: (p) postpone, (df) diff-full, (e) edit, 
    (mc) mine-conflict, (tc) theirs-conflict, 
    (s) show all options: svn: Can't read stdin: End of file found 

Есть ли способ исправить это?

Thanks

+1

Проблема в том, что stdin svn не является консолью. Это вход xargs, т. Е. Выход эха. – Pat

ответ

0

Да, есть способ исправить это! См. Ответ how to prompt a user from a script run with xargs. Короче говоря, использовать

xargs -a FILENAME your_script 

или

xargs -a <(cat FILENAME) your_script 

Первую версию на самом деле читает строку из файла, а второй один фальсифицирует чтения строк из файла, что удобно для использования xargs в трубных цепях с awk или perl. Не забудьте использовать флаг -0, если вы не хотите разбивать пробелы!

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