Зависимость пакета имеет неправильное имя

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

  • позиционные параметры командной строки
  • переменные окружения
  • любой IPC (Inter -Process Communication ), доступный в вашей ОС

Чтобы сосредоточиться только на первых двух,

  • Наиболее естественным способом являются позиционные параметры. Это включает в себя возможное издание и дальнейшую передачу "$@", которая обозначает все определенные в настоящее время позиционные параметры. Это должно быть сделано на всех этапах иерархии процессов.
  • Переменные окружения не так прямолинейны -, как позиционные параметры, поскольку они представляют собой пару значений -и -. Даже если вы передаете значения таким образом, вам нужны ключи для их получения. Пока они не являются единственными переменными среды, которые я бы не принял без надлежащего рассмотрения. Но этот метод жизнеспособен. Все, что вам нужно сделать, это поделиться ключами между заинтересованными сторонами. Сами ключи могут быть основаны на шаблоне. Вот пример того, как это можно сделать.

    Есть два скрипта--p.bashи c.bash. pобозначает родительский объект, а c— дочерний. Они могут быть разделены посредниками, если они не удаляют значения, передаваемые через среду. Для простоты эти два скрипта имеют непосредственную связь в том, что p.bashвызывает c.bash.

    Вотp.bash:

    #!/bin/bash
    shift #consume the first argument
    #parse and export the other arguments
    prefix=abcdef_
    i=0
    for a in "$@"; do
        export "$prefix""$i"="$a"
        ((i++))
    done
    ./c.bash
    

    А вотc.bash:

    #!/bin/bash
    #consume the env arguments
    prefix=abcdef_
    env | grep ^"$prefix"
    

    А вот и казнь:

    $./p.bash arg "1 2" "3 4" "5 6"
    abcdef_0=1 2
    abcdef_1=3 4
    abcdef_2=5 6
    

    Я объясню две строки, по одной из каждого сценария.

    Первый — генератор,

     export "$prefix""$i"="$a"
    

    exportзаполняет окружение переменными вида abcdef_0, abcdef_1и т. д. Теперь дочерние процессы могут найти их в своем окружении. (При условии, что они не отключены каким-либо посредником.)

    env | grep ^"$prefix"в ребенке есть потребитель. envперечисляет переменные среды, а grepотфильтровывает все строки, не связанные с префиксом, отвечающим за рассматриваемую передачу. Как только вы поймете, что здесь происходит, вы сможете получить доступ к переданным переменным и использовать их внутри процесса-потомка.

3
25.04.2017, 21:41
1 ответ

Это ошибка в файле спецификаций, и начиная с версии 0.3.12 -9.6 уже исправлена.

Если вы столкнетесь с чем-то подобным в будущем, вот как это исправить:

  1. Загрузите пакет src.rpm(по ссылке, указанной в исходном вопросе, выберите свою операционную систему и нажмите «Загрузить двоичные пакеты напрямую».
  2. Убедитесь, что инструменты сборки RPM установлены:dnf install rpm-build rpmdevtools yum-utils wget
  3. Разверните исходный пакет RPM:rpm -i polychromatic*.src.rpm. Это извлечет файлы из исходного RPM-пакета в ~/rpmbuild-, который, возможно, потребуется создать :, следуйте уведомлениям на экране и создайте все недостающие каталоги.
  4. Отредактируйте файл спецификации пакета в ~/rpmbuild/SPECS/polychromatic.specи измените соответствующие определения Requires:, чтобы они были такими, какими они должны быть.
  5. Загрузите необходимые исходные файлы:spectool -g -R ~/rpmbuild/SPECS/polychromatic.spec
  6. Загрузите и установите требования к сборке:yum-builddep -y ~/rpmbuild/SPECS/polychromatic.spec
  7. Создание новых бинарных пакетов:rpmbuild -bb ~/rpmbuild/polychromatic.spec
  8. Установите новые пакеты:dnf install ~/rpmbuild/RPMS/x86_64/polychromatic*.rpm
1
02.11.2020, 12:52

Теги

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