Похоже, здесь есть две проблемы. Во-первых, для определения функции требуется ключевое слово function
, по крайней мере, в моей системе, поэтому определение функции должно быть:
function certspotter(){
curl -s https://certspotter.com/api/v0/certs\?domain\=$1 | jq '.[].dns_names[]' | sed 's/\"//g' | sed 's/\*\.//g' | sort -u | grep $1
}
Затем, как упоминалось в комментариях, скрипт, вызывающий функцию, должен получить файл, содержащий функцию. Поскольку в настоящее время у вас все настроено, это будет:
..bash_profile
Тем не менее, вы можете подумать о том, хотите ли вы вызвать свой профиль.bash _только для того, чтобы импортировать функцию. Вместо этого вы можете создать отдельный файл сценария для своей библиотеки функций.
Предполагая, что вы используете GNU sed
, ваш цикл будет добавлять строку со строкой # CONFIG_GREEN=y
после каждого совпадения с регулярным выражением CONFIG_BLUE
в файле test.txt
. Он будет многократно добавлять одну и ту же строку в один и тот же файл для каждого имени файла в текущем каталоге, соответствующем шаблону подстановки оболочки test*.txt
.
Чтобы получить две строки добавленного текста в test.txt
, затем либо
test*.txt
, или Судя по комментариям , это был второй из этих трех случаев.
Чтобы завершить изменения в цикле, используйте переменную цикла в фактическом вызове sed
.
for name in test*.txt; do
sed -e '/CONFIG_BLUE/a\' -e '# CONFIG_GREEN=y' "$name"
done
На данный момент я удалил параметр -i
для GNU sed
, чтобы вы могли проверить результат и повторно -запустить без изменения каких-либо файлов. Обратите внимание, что если у вас есть достаточное количество файлов, вы можете вызвать sed
с шаблоном подстановки имен файлов напрямую, чтобы работать со всеми файлами один за другим. Вы также можете использовать -i
для редактирования места в -при условии, что вы используете GNU sed
.
sed -i -e '/CONFIG_BLUE/a\' -e '# CONFIG_GREEN=y' test*.txt