На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила трёх "С"
Пожалуйста,
1. Соблюдайте правила Форума.
2. Слушайте советы Модераторов.
(например, http://forum.sources.ru/index.php?act=ST&f=7&t=80382 )
3. Сверяйтесь с учебником по Великому и Могучему
  
> Про конвейер в shell
    Господа, у меня следующий вопрос.
    Сначала я ищу файлы в /usr/lib с расширением *.о:

    find '/usr/lib' -type f -iname '*.o' | more

    Затем я хочу послать все это на ввод команды nm, которая читает объектники:

    find '/usr/lib' -type f -iname '*.o' | nm

    - ничего не получается - результат такой как будто я ввел просто одну команду
    безаргументов.

    Может что-то нетак. Буду очень благодарен подсказкам.
    Спасибо!



      find '/usr/lib' -type f -iname '*.o' -exec nm {} \;

      100\% толко что проверил.

      -exec вызывает для каждого найденного файла nm
      {} держателль места для каждого найденного файла
      \; обязателное окончание при -exec '\' маскирует ';'

      man find
        Способ "find '/usr/lib' -type f -iname '*.o' -exec nm {} \;" хорош, но есть и альтернативный подход, который сработает быстрее на большом количестве файлов за счет того, что "nm" будет вызываться не для каждого аргумента, а для групп аргументов:

        find '/usr/lib' -type f -iname '*.o' | xargs nm

        ключевая фишка здесь - прога xargs. Не уверен, что она есть на всех юниксах - отсюда могу проверить только HP-UX 11.0 - работает отлично. По-умолчанию xargs группирует так, чтоб не превысить ARG_MAX и LINE_MAX, но можно в командной строке сказать, по сколько аргументов объединять с помощью опций -n, -l, -x...
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0226 ]   [ 15 queries used ]   [ Generated: 27.04.24, 19:34 GMT ]