Что означает линия $ (rpm -E% fedora)?

Я пытаюсь добавить новый репозиторий в свою Fedora и попросил ввести следующую команду:

su -c 'yum localinstall --nogpgcheck http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm' 

Я пытаюсь понять, что означает каждая часть команды, и почти все, кроме строки $(rpm -E %fedora) . Я искал ее, но ничего не нашел, поэтому решил спросить здесь.

Он запускает команду rpm -E %fedora и заменяет ее вывод из stdout во внешнюю команду.

rpm -E оценивает переменную (ы) в тексте, переданном ей.

Макросы RPM

Когда у вас есть такие вопросы, лучше проконсультироваться с man-страницами. Взгляните на страницу man rpm .

 $ man rpm ... -E, --eval='EXPR' Prints macro expansion of EXPR. 

Понимая, что %fedora – это макрос, если вы немного продвинетесь на странице man rpm вы можете увидеть, какие файлы предоставляют макроопределения.

 Macro Configuration /usr/lib/rpm/macros /usr/lib/rpm/redhat/macros /etc/rpm/macros ~/.rpmmacros и Macro Configuration /usr/lib/rpm/macros /usr/lib/rpm/redhat/macros /etc/rpm/macros ~/.rpmmacros в Macro Configuration /usr/lib/rpm/macros /usr/lib/rpm/redhat/macros /etc/rpm/macros ~/.rpmmacros 

Взяв заглядывание внутри /etc/rpm/macros вы обнаружите это определение.

 $ grep fedora /etc/rpm/macros* /etc/rpm/macros.dist:%fedora 19 

Таким образом, мы видим, что существует определение, называемое %fedora а в моей системе (Fedora 19) значение «19».

Выполнение командной строки

Обозначение $(..) будет выполнять любую команду между скобкой и заменять возвращенные результаты на их место.

пример

 $ echo $(echo hi) hi 

Или в вашем случае:

 $ echo $(rpm -E %fedora) 19 

Объединяя все это

Поэтому, когда команда, о которой вы спрашиваете, выполняет следующие действия. Макрос RPM, %fedora оценивается с помощью команды rpm . Эта команда выполняется в строке. После расширения до «19» это значение используется в большей команде yum для установки соответствующего файла .rpm для данной версии Fedora.