трубопроводы против - PullRequest
       19

трубопроводы против

1 голос
/ 03 декабря 2009

Начиная играть в bash в Linux, я пытаюсь выполнить операцию очистки всех файлов в результате другой операции очистки. Другими словами, я хочу проверить все извлеченные файлы.

Команда для просмотра извлеченных файлов: cleartool lsco -short -rec. Команда для проверки в файле: cleartool ci -nc filename.

Я могу сделать это с помощью следующего цикла for:

for f in 'cleartool  lsco -short -rec.'; do cleartool ci -nc $f; done

Мне интересно, есть ли другой способ сделать это с использованием конвейеров? Что-то вроде:

cleartool lsco -short -rec . | cleartool ci -nc

Проблема в том, что cleartool не читает stdin, но ожидает параметр, верно?

Ответы [ 3 ]

3 голосов
/ 03 декабря 2009

Да, правильно.

Как правило, вы можете преобразовать «список аргументов по одному на строку, как проходящий через канал», в «список аргументов в одной строке, как при вызове команды», используя xargs :

Ричард также указывает, как сделать это более напрямую, используя подстановку оболочки.

$ cleartool lsco -short -rec . | xargs cleartool ci -nc
1 голос
/ 03 декабря 2009
cleartool ci -nc `cleartool lsco -short -rec .`
0 голосов
/ 03 декабря 2009

У меня есть две эти функции, определенные в моем .bashrc:

$ cico () { ct lsco -me -cview -short ${@} | enquote | xargs cleartool ci -nc; }
$ cicor () { ct lsco -me -r -cview -short ${@} | enquote | xargs cleartool ci -nc; }

Enquote:

$ enquote () { /usr/bin/sed 's/^/"/;s/$/"/' ; }

Вам понадобятся -me и -cview, если вы начнете работать над проектом с другими людьми, потому что по умолчанию lsco покажет всем извлеченные файлы и файлы, которые вы извлекли, в разных представлениях.

В общем, основная команда, которую вы ищете, это xargs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...