LINUX.ORG.RU

Сообщения tig1818

 

sed захлебывается от grep

 , ,

Всем доброго времени суток!

Имеется директория, содержащая несколько поддиректорий, некоторые из которых тоже содержат поддиректории. Все это хозяйство набито текстовыми файлами, общим числом где-то под тысячу. Требуется инструмент для контроля вхождений некоторого шаблона в эти файлы. Проблема в том, что отдельные вхождения могут быть закомментированы по правилам Си, т.е. возможны однострочные (//…), и многострочные (/*** … ***/) комменты, которые надо игнорировать.

Выходной формат этого инструмента должен включать путь до файла, в котором найдено вхождение шаблона, номер строки с ним и собственно строку. Подробно поясняю чтобы было понятнее, для чего весь огород.

Итак, инструмент:

grep -IHrn . $SRC | sed '/\/\*.*\*\// d; /\/\*/,/\*\// d; s://.*$::' | grep -w $SHAB

где $SRC - источник, $SHAB - искомый шаблон (текстовая строка без пробелов).

Первый grep по сути только выводит каждый файл построчно и вставляет в начало строк путь к файлу и номер строки. Второй grep выполняет селекцию. А вот sed убирает все комменты из вывода: первая секция - однострочные длинные, вторая - многострочные длинные, третья - однострочные типа //.

И вот тут интересный эффект: если SRC - одиночный файл или небольшая поддирка - все работает правильно. Если SRC большой каталог - часть вывода пропадает, походу из файлов в конце списка. Если убрать sed и оставить grep... | grep... то вывод всегда полный, но с комментами, а с sed-ом - неполный. Проверено на эталонных шаблонах в эталонных файлах.

Кто-нибудь может объяснить что происходит и как с этим бороться без лишней заморочки с разделением на подкаталоги? Я предполагаю что sed не успевает обрабатывать вывод grep-а, захлебывается и в канале теряются буфера.

tig1818
()

Проверка валидности указанного пароля root в bash скрипте

 , ,

Имеется некоторый bash-скрипт, автоматизирующий процесс обновления и конфигурирования некоторого софта на солидной группе удаленных хостов. Все манипуляции выполняются от имени root, соответственно, на всех удаленных хостах и хосте откуда скрипт пускается пароли root одинаковые. Хранение этого пароля в тексте скрипта нежелательно по соображениям безопасности, пароль указывается через read ROOTPASS при запуске. Как проверить что введен правильный пароль root? Запуск возможен от любого юзера. Для не-rootа проблем нет, выполняем любое рутовое действие, через expect подсовываем ROOTPASS и проверяем результат. При запуске от рута это не катит. Пробовал коннектиться по ssh root@localhost - не проходит. Возиться с shadow слишком муторно. Посоветуйте что-нибудь.

tig1818
()