사용자 정의 바이너리/문서 이름으로 bash(또는 대체 Linux 패키지) 빌드

사용자 정의 바이너리/문서 이름으로 bash(또는 대체 Linux 패키지) 빌드

저는 기본적으로 3.2.25와 함께 제공되는 Enterprise Linux 5 시스템에서 사용하기 위해 Bash 4.2를 RPM 패키지로 빌드하려고 합니다. 이것은 성공적으로 작동하지만 시스템 패키지와의 충돌을 피하고 시스템/기타 스크립트가 호환되는 bash3을 계속 사용할 수 있도록 두 버전이 시스템에 공존하기를 원합니다.

내 계획은 다음과 같습니다.

  • 패키지 이름을 'bash4'로 바꾸고 'bash'와 충돌하거나 'sh'를 제공하지 마세요.
  • 바이너리 이름 'bash4'로 빌드하도록 bash를 구성하고 그에 따라 문서 또는 지원 파일의 경로를 변경합니다.

이론적으로 이것은 간단하고 Vim은 구성 스크립트에서 바이너리 접두사/접미사를 제공하지만 bash에는 이 기능이 없는 것 같습니다. 내가 찾은 가장 가까운 것은 실행 가능한 확장(예: Windows의 .exe)에 대한 지원을 제공하는 automake의 EXEEXT이지만 이것은 실제로 내가 원하는 작업을 위해 설계되지 않았으며 문서 문제를 해결하지 않습니다.

답변1

bashautoconf 버전(2.63)은 약간 오래된 버전(2008년 9월)이지만 및 --program-transform-name기능 을 지원합니다 --program-suffix. 안타깝게도 bash 빌드 프로세스는 이러한 기능을 다음과 같이 사용하지 않습니다.문서에 자세히 설명되어 있습니다., 매뉴얼 페이지의 빌드 타임 처리를 허용하기 위해 매개변수를 사용하지도 않습니다.

파일 수와 변경 사항이 적기 때문에 반 수동 접근 방식을 권장합니다. 즉, 설치 전에 변경 사항을 적용하는 작은 스크립트를 작성하는 것입니다. 선택적으로 사용할 수 있습니다설치시계설치하는 동안 모든 것을 포착할 수 있도록 하려고 하지만 bash실제로는 아주 최소한입니다. (FWIW, FreeBSD bash 포트와 Debian bash 패치를 잠깐 살펴보았는데 적절한 수정 사항은 없었습니다.)

일반적으로 빌드를 중단하는 흥미로운 방법이기는 하지만~할 수 있다EXEEXT여기서 남용 :

ac_cv_exeext=42 ./configure [...]
make
./bash42 -c 'echo $BASH_VERSION'
4.2.42(1)-release

당신을 구한 것은 이름을 바꾸는 것뿐이었기 때문에 나는 그것을 정말로 추천하지 않습니다 ;-)

다음으로부터 얻을 수 있는 것이 조금 더 있습니다.

./configure [...]
make -e Program=bash42

이는 생성된 스크립트 내의 변경 사항도 반영하기 때문입니다 bashbug(이름은 바뀌지 않지만).

관련 정보