Общий ответ таков. Вы можете передать аргументы, используя:
Чтобы сосредоточиться только на первых двух,
"$@"
, которая обозначает все определенные в настоящее время позиционные параметры. Это должно быть сделано на всех этапах иерархии процессов. Переменные окружения не так прямолинейны -, как позиционные параметры, поскольку они представляют собой пару значений -и -. Даже если вы передаете значения таким образом, вам нужны ключи для их получения. Пока они не являются единственными переменными среды, которые я бы не принял без надлежащего рассмотрения. Но этот метод жизнеспособен. Все, что вам нужно сделать, это поделиться ключами между заинтересованными сторонами. Сами ключи могут быть основаны на шаблоне. Вот пример того, как это можно сделать.
Есть два скрипта--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
отфильтровывает все строки, не связанные с префиксом, отвечающим за рассматриваемую передачу. Как только вы поймете, что здесь происходит, вы сможете получить доступ к переданным переменным и использовать их внутри процесса-потомка.
Это ошибка в файле спецификаций, и начиная с версии 0.3.12 -9.6 уже исправлена.
Если вы столкнетесь с чем-то подобным в будущем, вот как это исправить:
src.rpm
(по ссылке, указанной в исходном вопросе, выберите свою операционную систему и нажмите «Загрузить двоичные пакеты напрямую».dnf install rpm-build rpmdevtools yum-utils wget
rpm -i polychromatic*.src.rpm
. Это извлечет файлы из исходного RPM-пакета в ~/rpmbuild
-, который, возможно, потребуется создать :, следуйте уведомлениям на экране и создайте все недостающие каталоги. ~/rpmbuild/SPECS/polychromatic.spec
и измените соответствующие определения Requires:
, чтобы они были такими, какими они должны быть. spectool -g -R ~/rpmbuild/SPECS/polychromatic.spec
yum-builddep -y ~/rpmbuild/SPECS/polychromatic.spec
rpmbuild -bb ~/rpmbuild/polychromatic.spec
dnf install ~/rpmbuild/RPMS/x86_64/polychromatic*.rpm