функция поиска внутри оболочки

Вы можете попробовать изменить параметр urlBase . В сети это можно сделать, войдя в Bugzilla и перейдя на /editparams.cgi , где это первый параметр в категории Требуемые настройки ( http: // xy /bugzilla/editparams.cgi?section=core#urlbase_desc, например).

В автономном режиме параметр сохраняется в файле в data / , с именем params в старых версиях и params.json в новых версиях (у меня замечен params.json с 4.8.8, IIRC).

1
17.11.2018, 16:42
2 ответа

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

DO "*.tex"

Затем вы можете использовать только "$1"вместо "$@", так как будет только один параметр.

0
27.01.2020, 23:15

В вашем коде есть несколько ошибок:

  1. Шаблон *.texбудет расширен при вызове функции DO, если он соответствует каким-либо именам файлов в текущем каталоге. При вызове функции вам нужно указать шаблон как '*.tex', "*.tex"или \*.tex.

  2. lsне требуется. У вас уже есть findи grep, которые могут сообщать пути к найденным файлам.

  3. -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
}
5
27.01.2020, 23:15

Теги

Похожие вопросы