내가 사용하고 싶은 몇 가지 공통 코드가 있습니다.%예비의그리고%우편 엽서내 역할회전 속도사양 문서. 서브루틴을 넣었을 때%예비의섹션에 동일한 서브루틴을 추가해야 합니다.%우편 엽서RPM 섹션. 동일한 서브루틴을 두 번 유지하는 것은 좋지 않습니다. 예는 다음과 같습니다.
회전 속도사양 문서%예비의그리고%우편 엽서부분:
%pre
log_file=/var/log/myrpminstall.log
#-------------------------------------
# Send text log_file
#-------------------------------------
log_it() {
log_msg=$1
echo -e $log_msg >> $log_file
}
log_it "pre section log information"
%post
log_it "Post section log informations"
현재 언제%우편 엽서부분회전 속도설치 중에 실행하는 동안 다음 오류 메시지를 받았습니다.
/var/tmp/rpm-tmp.36557: line 5: log_it: command not found
그럼, 이런 서브루틴을 만드는 방법이 있나요?통나무(전역 기능)의 모든 부분에 접근 가능회전 속도??현재 해야 할 일통나무기능하다%우편 엽서거기에 사용하고 싶다면.
답변1
이것이 작동하지 않는 이유는 각 스크립틀릿( %post
등 %pre
)이 독립형 스크립트로 작성되어 실행을 위해 bash/sh에 전달되기 때문입니다. 따라서 이를 실행하는 셸은 다른 스크립틀릿에 정의된 함수에 대해 알지 못합니다.
이 목적으로 RPM 매크로를 사용하는 것이 좋습니다. ~/.rpmmacros
또는 에 넣을 수 있습니다 /etc/rpm/macros
. 이 같은:
%define log \
log_it() { \
log_msg=$1 \
echo -e $log_msg >> $log_file \
}
%pre
%log
log_it test
%post
%log
log_it test
바라보다http://rpm5.org/docs/rpm-guide.pdf자세한 내용은 /usr/lib/rpm/macros
.