Fedora

$(rpm -E %fedora) 這行是什麼意思?

  • December 26, 2013

我正在嘗試向我的 Fedora 添加一個新的儲存庫,並被要求引入以下命令:

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

我試圖了解命令的每個部分的含義,並且幾乎擁有一切,除了 line $(rpm -E %fedora)。我用Google搜尋但一無所獲,所以我決定在這裡問。

它執行命令rpm -E %fedora並將 stdout 的輸出替換為外部命令。

rpm -E評估傳遞給它的文本中的變數。

RPM 宏

當您有這樣的問題時,最好查閱手冊頁。看一下rpm手冊頁。

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

%fedora如果您在手冊頁中進一步了解這是一個宏,rpm您可以看到哪些文件提供了宏定義。

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

把它們放在一起

因此,當您詢問的命令執行時,會發生以下情況。使用該命令%fedora評估RPM 宏。rpm該命令在行中執行。一旦擴展為“19”,該值將在更大的yum命令中.rpm用於為給定版本的 Fedora 安裝適當的文件。

引用自:https://unix.stackexchange.com/questions/106626