2012-04-19 27 views
29

Tôi có tệp spec. Tôi cần phải xác định một biến số spec có giá trị của nó từ một tập tin một dòng trên hệ thống.Tệp thông số RPM - Có thể tự động điền biến tệp thông số

Ví dụ

%define path `cat /home/user/path_file` 

và trong path_file là một dòng

/var/www/html/hosts 

này một phần hoạt động. Tôi nói rằng bắt đầu trong sản lượng RPM BUILD đôi khi giá trị của ${path} là nghĩa đen lệnh của tôi cat /home/user/path_file và đôi khi giá trị là dòng trong path_file (/ var/www/html/hosts) như nó phải được?

Trả lời

39

Bạn có thể xác định biến rpmbuild với %(cmd) ở đầu tệp spec. Chú ý lệnh nằm trong ngoặc đơn, không phải dấu ngoặc nhọn. Một ví dụ:

%define whoami %(whoami) 

Và ở đâu đó trong file spec, chẳng hạn như một kịch bản hay build/cài đặt phần, sử dụng các biến như bình thường trong dấu ngoặc nhọn như thế này:

echo "The user that built this is %{whoami}" 

Các cmd thể là bất cứ điều gì, bao gồm cả lệnh mèo của bạn. Hãy cẩn thận - khi một người dùng khác xây dựng lại tệp spec, nó có thể không tìm thấy tệp. Vì vậy, nó sẽ thích hợp hơn để sử dụng {} SourceDir vĩ mô% như thế này:

%define path %(cat %{sourcedir}/path_file) 

Và chắc chắn rằng path_file là trong thư mục nguồn và bao gồm như là một nguồn trong file spec.

+1

NHIỀU NHIỀU CẢM ƠN Corey !!! Tôi đã tìm kiếm câu trả lời cho WEEEKS này !!! Cảm ơn bạn một lần nữa –

+0

Corey - nếu tôi muốn/home/user/path_file là "Bắt buộc" cho rpm để chạy? Tôi có thể biến nó thành tham số PreReq hoặc Bắt buộc trong tệp spec của mình không? Khi tôi thử yêu cầu nó nói rằng các tập tin không có ở đó và nó hoàn toàn là có? –

+0

Các tùy chọn PreReq, vv tùy thuộc vào các tệp đang được cài đặt trên hệ thống thực sự tìm trong cơ sở dữ liệu rpm cho sự tồn tại của một gói sở hữu tệp. Nó không kiểm tra hệ thống tập tin cho sự tồn tại của tập tin. –

Các vấn đề liên quan