Вы можете попробовать изменить параметр urlBase
. В сети это можно сделать, войдя в Bugzilla и перейдя на /editparams.cgi
, где это первый параметр в категории Требуемые настройки ( http: // xy /bugzilla/editparams.cgi?section=core#urlbase_desc
, например).
В автономном режиме параметр сохраняется в файле в data /
, с именем params
в старых версиях и params.json
в новых версиях (у меня замечен params.json
с 4.8.8, IIRC).
Параметр функции нужно заключать в кавычки, иначе оболочка его раскроет и функция получит список файлов, а не маску подстановки:
DO "*.tex"
Затем вы можете использовать только "$1"
вместо "$@"
, так как будет только один параметр.
В вашем коде есть несколько ошибок:
Шаблон *.tex
будет расширен при вызове функции DO
, если он соответствует каким-либо именам файлов в текущем каталоге. При вызове функции вам нужно указать шаблон как '*.tex'
, "*.tex"
или \*.tex
.
ls
не требуется. У вас уже есть find
и grep
, которые могут сообщать пути к найденным файлам.
-name "$@"
работает правильно, только если "$@"
содержит один элемент. Лучше использовать -name "$1"
. Решение, позволяющее использовать несколько шаблонов, см. ниже.
Функция может быть записана
DO () {
# Allow for multiple patterns to be passed,
# construct the appropriate find expression from all passed patterns
for pattern do
set -- "$@" '-o' '-name' "$pattern"
shift
done
# There's now a -o too many at the start of "$@", remove it
shift
find. -type f '(' "$@" ')' -exec grep -qF 'TODO' {} ';' -print
}
Вызов этой функции как
DO '*.tex' '*.txt' '*.c'
заставит его выполнить
find. -type f '(' -name '*.tex' -o -name '*.txt' -o -name '*.c' ')' -exec grep -qF TODO {} ';' -print
Это сгенерирует список путей к файлам с этими суффиксами имен файлов, если файлы содержат строку TODO
.
Чтобы использовать grep
вместо find
для печати найденных путей, измените бит -exec... -print
на -exec grep -lF 'TODO' {} +
. Это будет эффективнее,особенно если у вас есть большое количество имен файлов, соответствующих заданному выражению (s ). В любом случае вам определенно не нужно использовать ls
.
Чтобы разрешить пользователю использовать
DO tex txt c
ваша функция может быть изменена на
DO () {
# Allow for multiple patterns to be passed,
# construct the appropriate find expression from all passed patterns
for suffix do
set -- "$@" '-o' '-name' "*.$suffix" # only this line (and the previous) changed
shift
done
# There's now a -o too many at the start of "$@", remove it
shift
find. -type f '(' "$@" ')' -exec grep -qF 'TODO' {} ';' -print
}