Как настроить reportbug для использования smtp-пароля из набора ключей gnome -?

Я надеюсь, что есть какой-то символ — или хотя бы какая-то строка — который никогда не появляется в вашем файле. Я предполагаю, что это верно для |. Чтобы быть в безопасности, я буду использовать ||.

Запустите эту команду:

sed -n -e H -e '/^ *\/> *$/ { s/.*//; x; s/.*NS1:name="\([^"]*\)/\1&/; s/\n/||/gp }' your_file |
        sort |
        nl -ba |
        sed -e 's/ *\([0-9]*\)[^|]*||\(.* RDF:about="rdf:#$CHROME\)[0-9]*/\2\1/' -e 's/||/\n/g'

Примечание. :Для этого (возможно )требуется наличие GNU sed.

Обзор

  • Используйте sedдля преобразования файла в формат, пригодный для сортировки. (подробности ниже ).
  • Сортировка вывода из sed.
  • Применить (добавление перед )номеров строк. Используйте любую команду, которая будет генерировать подходящие числа. Мне нравится nl -ba, но cat -nтоже подойдет, и наверняка есть другие варианты.
  • Используйте sed, чтобы отделить номер строки от начала строки и вставьте его после CHROME. Восстановите данные обратно в исходный формат.

Детали — Первая sedкоманда

Команда sortобрабатывает каждую строку как запись. Поэтому мы берем каждую (запись с разделителями )из вашего входного файла. и соедините все строки, образуя одну длинную строку. Также копируем значение nameв начало строки, чтобы не указывать ключ сортировки.

  • Используйте параметр -nдля подавления автоматической печати. Строки будут напечатаны только тогда, когда мы скажем p.

  • Выполнить Hдля каждой строки. Это добавит текущую строку в область хранения. По логике может быть логичнее вскопироватьстроку <в область хранения (с помощью команды h)а затем добавьте все последующие строки. Я произвольно выбрал этот подход.

    Обратите внимание, что, поскольку мы добавляем строку <к пустому удержанию, объединенная запись имеет дополнительную новую строку в начале.

  • Найдите строку, содержащую />, необязательно, перед и/или за которыми следуют пробелы. Когда мы находим его, мы знаем, что у нас есть полная запись в хранилище. Выполните следующие команды только в этих строках.

    • s/.*//очищает пространство шаблонов (, т.е.он стирает строку />). На самом деле это не выброс какой-либо информации; строка />уже была добавлена ​​в пробел (, потому чтокаждаястрока добавляется к пространству хранения ).
    • xменяет местами пространство шаблона и пространство хранения. Это извлекает агрегированную (добавленную / конкатенированную запись ). из пространства удержания в пространство шаблона. Из-за предыдущей команды(s/.*//)это очищает пространство удержания.
    • s/.*NS1:name="\([^"]*\)/\1&/ищет поле имени и копирует его значение в начало записи. Это не удастся, если вы можете иметь имя с символами кавычек .
    • s/\n/||/gpзаменяет каждую новую строку в пространстве шаблонов на ||. (Это шаг, который преобразует запись в одну строку. )Из-за pэто печатает запись.

Вывод первой команды sedпри выполнении с файлом примера:

AAA Carolinas||<RDF:Description RDF:about="rdf:#$CHROME1"|| NS1:name="AAA Carolinas"||  NS1:urlToUse=""||  NS1:whereLeetLB="off"||  NS1:leetLevelLB="1"||  NS1:hashAlgorithmLB="md5"||  NS1:passwordLength="16"||  NS1:usernameTB="user"||  NS1:counter=""||  NS1:charset="a9b0c8d1e7f2g6h3i5j4klmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV123456789"||  NS1:prefix="6%Fl"||  NS1:suffix="I$5g"||  NS1:protocolCB="false"||  NS1:subdomainCB="true"||  NS1:domainCB="true"||  NS1:pathCB="false"||  />
Adobe Forums||<RDF:Description RDF:about="rdf:#$CHROME2"|| NS1:name="Adobe Forums"||  NS1:urlToUse="adobeforums.com"||  NS1:whereLeetLB="off"||  NS1:leetLevelLB="1"||  NS1:hashAlgorithmLB="md5"||  NS1:passwordLength="12"||  NS1:usernameTB="username"||  NS1:counter=""||  NS1:charset="a9b0c8d1e7f2g6h3i5j4klmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV"||  NS1:prefix=""||  NS1:suffix=""||  NS1:protocolCB="false"||  NS1:subdomainCB="true"||  NS1:domainCB="true"||  NS1:pathCB="false"||  NS1:pattern0="*adobeforums.com*"||  NS1:patternenabled0="true"||  NS1:patterndesc0=""||  NS1:patterntype0="wildcard"||  />
Adorama||<RDF:Description RDF:about="rdf:#$CHROME3"|| NS1:name="Adorama"||  NS1:urlToUse="adorama.com"||  NS1:whereLeetLB="off"||  NS1:leetLevelLB="1"||  NS1:hashAlgorithmLB="md5"||  NS1:passwordLength="8"||  NS1:usernameTB="username"||  NS1:counter=""||  NS1:charset="a9b0c8d1e7f2g6h3i5j4klmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV"||  NS1:prefix=""||  NS1:suffix=""||  NS1:protocolCB="false"||  NS1:subdomainCB="false"||  NS1:domainCB="true"||  NS1:pathCB="false"||  NS1:pattern0="*adorama.com*"||  NS1:patternenabled0="true"||  NS1:patterndesc0=""||  NS1:patterntype0="wildcard"||  NS1:pattern1="www.adoramapix.com*"||  NS1:patternenabled1="true"||  NS1:patterndesc1=""||  NS1:patterntype1="wildcard"||  />

Детали — Вторая sedкоманда

  • s/ *\([0-9]*\)[^|]*||\(.* RDF:about="rdf:#$CHROME\)[0-9]*/\2\1/разбивает строку на части:

    • Ноль или более пробелов.
    • Номер строки (ноль или более цифр ). Это становится группой \1.
    • Вкладка после номера строки, значение nameи ||после него.
    • Запись есть RDF:about="rdf:#$CHROME. Это становится группой \2.
    • Номер старой записи (ноль или более цифр ).
    • Неявно остальная часть записи.

    Затем он заменяет первые пять частей с RDF:about="rdf:#$CHROMEи номером строки (новый номер записи ). Поскольку остальная часть записи не была совмещена, на него не влияет команда.

  • s/||/\n/gзаменяет каждый ||новой строкой, восстановление (воссоздание )исходной многострочной -структуры файла.

Очевидно,…

… для отправки вывода в файл, добавить > your_output_fileв самом конце последней строки команды (, т.е. в конце второй sed). Затем вы можете переместить(mv) your_output_fileв исходный файл. Нет никакого смысла указывать опцию--output=(или -o). на команду sort; вывод изsortдолжен войти в команду который применяет номера строк. Если вы хотите захватить промежуточный файл, скажите об этом.

0
17.10.2020, 10:23
1 ответ

Завершено определение псевдонима в ~\.bash_aliases.

alias reportbug-pass='reportbug --smtppasswd="$(secret-tool lookup eds-origin evolution-data-server e-source-uid 7f1e149e069bd66ab5aa1a734baa113943cdf0ee)"'

Использование этого псевдонима вместо вызова reportbugнапрямую вызывает reportbug с уже переданным ему --smtppasswd. Теперь, если я хочу передать свой SMTP-пароль на reportbug, я могу вместо этого ввести этот псевдоним. Вы можете передать ему другие параметры, например, имя сообщаемого пакета, как и в reportbug.

$ reportbug-pass

Вместо псевдонима того же результата можно добиться, определив функцию в~\.bash_aliases

function reportbug-pass() {
    reportbug --smtppasswd="$(secret-tool lookup eds-origin evolution-data-server e-source-uid pdljjhvbuo6uvc7mydavpmbjqqhxqq2jyhqdndpmcvamknbih8cifgfg)" "$@"
}

В этой функции параметр "$@"расходуется на передаваемые ей аргументы , чтобы можно было передать, например, имя пакета.

В этом случае, будь то псевдоним или функция, запрос к связке ключей происходит, когда вы вызываете ее из командной строки. Если брелок заблокирован, вы получите обычную графическую подсказку, чтобы разблокировать брелок.

0
18.03.2021, 23:12

Теги

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