Я пытаюсь кодировать скрипт bash 4 (или sh, если это возможно), который выполняет следующее: 1-й параметр: путь к сжатым модулям для поиска, может быть "."2-й шаблон поиска для поиска
Сценарий до сих пор выглядит следующим образом (имейте в виду, что он не является надежным, он не проверяет, действительны ли оба параметра, он даже не проверяет, заданы ли вообще 2 параметра,все, что я бы добавил, если бы заставил скрипт работать так, как я хочу)
#!/bin/bash
for module in $(find $1 -type f -name "*.xzm"); do
echo $module
lsxzm $module | grep "$2"
done
lsxzm - это скрипт, который перечисляет содержимое сжатого живого модуля Linux.Теперь возможный результат для такого поиска будет выглядеть следующим образом (давайте рассмотрим, что я сохранил скрипт как «/ usr / local / bin / lsxzmgrep» и сделал его исполняемым):
/porteus/base# lsxzmgrep . libtiff.so.3
./000-kernel.xzm
./001-core.xzm
/usr/lib64/libtiff.so.3
/usr/lib64/libtiff.so.3.9.7
./001-de-core_locales.xzm
./002-xorg.xzm
./003-xfce.xzm
./010-nvidia-304.137-k.4.16.3-x86_64-don.xzm
Я бы хотелиметь только этот вывод:
/porteus/base# lsxzmgrep . libtiff.so.3
./001-core.xzm
/usr/lib64/libtiff.so.3
/usr/lib64/libtiff.so.3.9.7
Как это можно сделать?Все, что я могу придумать, это временно буферизировать вывод каждой команды grep из цикла for do done и печатать его вместе с именем модуля только тогда, когда grep что-то нашел, что было сделано путем проверки $?grep.
Но это было бы не слишком элегантное решение.
Теперь мне интересно, является ли сценарий оболочки, особенно для bash 4, способным получить тот же результат без необходимости буферизациирезультат grep и проверка возвращаемого значения команды grep, чтобы получить тот же результат: выводить имя модуля и список имен файлов только в том случае, если команда grep действительно что-то нашла?