Где установить сценарии завершения bash для пакетов вне дерева?

Простой, если ключевое слово всегда находится в одном столбце, например столбец номер 2

cut -d, -f 2 file(s) | grep -c 'true'

т.е. вырезать столбец 2 (-f 2), используя "," в качестве разделителя полей (-d,), получить (grep) все истины и посчитать их (-c)

сложнее, если нам нужно искать столбец " ARD "

awk  'BEGIN {FS = ","}  ; FNR == 1 { for ( i=1 ; i<=NF ; i++ ) { if ( $i=="ARD" ) { col=i } } } ; FNR >= 2 { print $col }' file(s) | grep -c 'true' 

1) BEGIN {FS =", "} перед каждым действием (BEGIN) используйте запятую ", " в качестве разделителя полей ( FS = )

2) для первой строки (т.е. строки заголовка) этого файла ( FNR == 1 ) для всех столбцов ( для (i = 1; i <= NF; i ++) ) проверьте, есть ли в этом столбце строка «ARD» ( if ($ i == «ARD») ); если это так, установите для переменной col номер этого столбца {col = i}

3) теперь, когда мы знаем номер нашего столбца, напечатайте столбец, пропуская первый (= заголовок ) строка (т.е. все строки больше 2) этого файла FNR> = 2 {print $ col} . здесь мы используем переменную col , как определено ранее.

4) направлять вывод через grep , подсчитывая ( -c ) количество вхождений «истина»

5) для распечатки файлов, используйте a для цикл в сценарии bash

0
10.01.2018, 20:45
2 ответа

Из того, что я смог собрать после продолжительного чтения, особенно их официальной документации , /usr/share/doc/bash-completion/README.Debianи самих источников:

  • /etc/bash_completion.d/— это унаследованный каталог, в котором дополнения загружаютсяс готовностью , т. е. все загружаются сразу при запуске основного скрипта. Только несколько пакетов все еще устанавливаются там, большинство уже перенесено на новый стандарт.

  • /usr/share/bash-completion/completions/— это каталог для файлов завершения, которые загружаются динамически по запросупользователем bash-completion. Они поставляются только , когда необходимы (и, что наиболее важно, , если необходимы ), экономя массу ресурсов, не загружая миллион дополнений для команд, которые вы никогда не будете использовать..


По поводу этого вашего комментария о/etc:

it would be mixed with apt controlled packages... I was hoping for a separate path

Файлы в /etcне совсем "управляемые", по крайней мере, не так, как /usr/binили /usr/share.[1] Это файлы конфигурации , и они предназначены для изменения локальным администратором (вами ). Пакеты создают их во время установки, обычно содержащие значения по умолчанию, а затем вы должны изменить их в соответствии со своими потребностями.

Некоторые пакеты делают еще один шаг вперед, чтобы упростить обслуживание, и вместо (или вместе с )конфигурационными файлами они также создают (пустой )конфигурационный каталог . для «вставки -» дополнительные файлы настройки. Таким образом, вместо изменения файла конфигурации для изменения некоторых настроек, сложной и чреватой ошибками задачи с использованием таких инструментов, как grep, sedи awk, вы просто создаете(или удаляете )файлы «фрагмента конфигурации», которые переопределяют нужные настройки.

Просмотрите все /etc/{,*/}*.d/каталоги в вашей системе. Ваш пакет хочет установить собственный репозиторий, например Google Chrome? Не редактируйте /etc/apt/sources.list, перетащите файл в /etc/apt/sources.list.d/. Новые услуги? /etc/systemd/system/. Настройки системы?/etc/sysctl.d/(Кстати, см. README ).

Гораздо проще, и больше не надо наступать друг другу на пятки.

Некоторые каталоги в /usr/shareведут себя так же :ваш файл .desktopпереходит в /usr/share/applications/, а новые MIME-типы — в /usr/share/mime/packages/и так далее. Отличие от /etcв том, что вы, администратор, не должны изменять или удалять файлы, которые вы не создавали/не устанавливали самостоятельно.

То же самое и с /usr/share/bash-completion/completions/.


Тем не менее, у меня есть хорошие и плохие новости для вас:

Плохая новость: если вы пытаетесь установить дополнение в их репозиторий github , это не дополнение bash, а файл дополнения zsh! И нет, bash и zsh полностью несовместимы в отношении дополнений.

Не волнуйтесь, хорошая новость заключается в том, что:ripgrepдоступен в репозиториях apt начиная с Ubuntu 18.10! Ура! :Д

sudo apt install ripgrep

И знаете что? Он содержит файл завершения bash ! Установлен, разумеется, по адресу /usr/share/bash-completion/completions/rg.

Время радоваться, приятель!


[1] :Честно говоря, можно сказать, что они «поддаютсямониторингу »,не контролируется. Прочтите Все, что вам нужно знать о файлах конфигурации conffiles :, управляемых dpkg , для получения более подробной информации.

2
18.08.2020, 08:41

Скрипты завершения дистрибутива обычно загружают пользовательские дополнения, если они найдены. Например. на Ubuntu, /etc/bash_completionисточники /usr/share/bash-completion/bash_completion.. и , что источники сценариев из ~/.ssh/..и ~/.bash_completion(, которые в моем случае источники~/local/etc/bash_completion.d/*).

Таким образом, если у вас настроен ~/.bash_completionтаким образом, (см.https://stackoverflow.com/a/12426672/274318способ получения всех файлов в каталоге ), вы можете просто установить дополнения ripgrepв локальный каталог дополнений..

1
28.01.2020, 04:32

Теги

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