Сохранение массива в качестве переменной среды в неинтерактивной оболочке с помощью xargs

Не забудьте включить репозиторий сообщества, отредактировав /etc/apk/repositories, а затем используя:

apk update
apk add audacity

Как минимум, вам нужно включить ALSA, иначе все входы и выходы в Audacity будут отображаться как пустые. Следуйте этим инструкциям:

https://wiki.alpinelinux.org/wiki/Sound_Setup

0
26.02.2021, 18:54
2 ответа
bash -c 'grep ${grepOptions+$grepOptions} ....'
  • grepOptions — это переменная оболочки, содержащая параметры grep, разделенные пробелами.
  • без использования ${var+alternative} ;в случае, если параметры не нулевые, используйте их, в противном случае используется пустой e без кавычек, который растворяется при синтаксическом анализе
  • Подразумевается, что переменные оболочки можно экспортировать.
-1
18.03.2021, 22:28

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

Вместо этого вам нужно будет передать параметры в свой bash -cскрипт вместе с путем, который вы хотите запустить grep.

Ниже я пошел немного дальше и также передал регулярное выражение и несколько найденных путей, и я делаю это из -execв find, а не с xargs.

Я использую --в вызове скрипта bash -c, чтобы отделить пользовательские параметры от путей.

find. -name '*.md' -type f -exec bash -c '
    re=$1; shift
    while [[ $1 != "--" ]]; do
        opts+=( "$1" )
        shift
    done; shift

    for pathname do
        printf "%s:" "$pathname"
        grep -o -E -e "$re" "${opts[@]}" -- "$pathname" |
        wc -l | tr -d "[:blank:]"
    done | grep -v ":0$"' bash "$user_regex" "${user_options[@]}" -- {} + |
sort -t : -k2,2n

Это находит все обычные файлы с суффиксом имени файла .mdв текущем каталоге или ниже. Для пакетов таких файлов выполняется сценарий bash, который принимает предоставленное пользователем -расширенное регулярное выражение ($user_regex), некоторые предоставленные пользователем -опции для команды grep($user_options, массив )вместе с набором путей.

Сценарий строки -выбирает регулярное выражение и пользовательские параметры, а затем переходит к циклу по найденным файлам, запуская grepдля каждого и подсчитывая количество возвращенных строк.

Имя пути каждого файла выводится с этим номером в конце после символа :.

Вывод, указывающий на отсутствие совпадений, отсеивается, а общий результат сортируется.

Из-за того, как этот код обрабатывает имена путей, он не будет поддерживать имена путей, содержащие символы новой строки или двоеточия. Массив user_optionsтакже не может содержать одиночное двойное тире.

1
18.03.2021, 22:28

Теги

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