2008-10-02 4 views
6

저는 autoconf를 실행하고 SHELL을 '/ bin/sh'로 설정합니다. 큰 문제가 발생합니다. SHELL을 autoconf에 대해 '/ bin/bash'로 만드는 방법?sh를 사용하는 autoconf, SHELL = BASH가 필요합니다. autoconf에 bash를 사용하려면 어떻게해야합니까?

저는 이것을 OSX에서 실행하려고합니다. 리눅스에서 작동하고 있습니다. Linux는 SHELL =/bin/bash를 사용하고 있습니다. osx의 기본값은/bin/sh입니다.

답변

7

- 그리고 나는 '표준'기술을 사용합니다 : 그것은 아마 버그의

CONFIG_SHELL=/bin/bash ./configure ... 

(또는, 실제로, 나는/빈/KSH하지만 설정을 사용을 CONFIG_SHELL env var는 어떤 쉘을 사용할 것인지를 autoconf 스크립트에 알릴 수있게합니다.)

git과 gd의 구성 스크립트 (추출 된 것)를 검사하여 이것이 GCC 고유의 env가 아닌지 확인했습니다.

-4

ln -f /bin/bash /bin/sh

- P (아니, 심각한 대답. 호스하지 마십시오 시스템을 수행하여 아니에요!)

SHELL가 설정되고
+0

당신은 내가 좋아하는 것을 모두 downvote 수 있습니다; 그냥 유머 감각이 없다는 것을 증명합니다. :-P –

0

?/bin/bash를 원할 때/bin/sh로 실행되는 것은 무엇입니까?

configure 스크립트는 야생에 존재하는 끔찍한 깨짐 및 비 Bash 쉘에서도 어디에서나 실행됩니다.

편집 : 정확히 무엇이 문제입니까?

다른 편집 : 아마 스크립트를 다시 실행하고 싶을 것입니다. 내가 GCC와 Solaris에서 유사한 문제가

if test "$SHELL" = "/bin/sh" && test -x /bin/bash; then 
    exec /bin/bash -c "$0" "[email protected]" 
fi 
+0

문제는 가끔 스크립트 구성에 Bourne 쉘에서 지원하지 않는 구문이 필요하다는 것입니다. 구성 스크립트가 손상되었지만 소프트웨어 업계에서는 그 수명이 길어졌습니다. 이 시점에서 올바른 쉘을 사용하여 실행되도록 Configure를 설득해야합니다. 그러면 필자가 지정한대로 CONFIG_SHELL이 필요합니다. –

4

"거대한 문제"는 무엇입니까? autoconf는 매우 많은 비율의 쉘로 작동하는 configure 스크립트를 생성하기 위해 매우 열심히 일합니다. autoconf가 이식 가능하지 않은 구문을 작성한 경우 autoconf 메일 링리스트에보고하십시오. 다른 한편, 만약 당신이 겪고있는 문제가 configure.ac에있는 자신의 쉘 코드가 이식 가능하지 않다면 (예를 들어 bashisms를 사용하고 있다면) 해결책은 이식성이없는 코드를 사용하지 않거나 사용자가 구성 할 때 SHELL 또는 CONFIG_SHELL을 명시 적으로 설정해야합니다.

발생하는 문제가 configure를 실행하는 사용자 환경 인 것 같습니다. Linux에서 사용자는 SHELL을/bin/bash로 설정했지만 OS X에서는/bin/sh로 설정됩니다. autoconf에 의해 생성 된 configure 스크립트는 실행중인 셸의 초기 테스트를 수행하고 제공된 셸에 특정 기능이없는 경우 다른 셸을 사용하여 다시 실행하려고 시도합니다. 그러나 configure.ac에 이식성이없는 쉘 코드를 도입한다면, autoconf의 주요 철학 중 하나를 위반하고 있습니다. 즉 configure 스크립트는 이식 가능해야합니다. 쉘 코드에서 bashisms를 사용하고 싶다면 configure 스크립트에 인수로 SHELL =/bin/bash를 전달해야합니다. 이것은 autoconf의 버그는 아니지만 많은 사람들이 프로젝트 빌드의 버그로 간주합니다.

+0

참고로 실제로/bin/sh가 문제가되는 경우가 있습니다. 예를 들어, AIX에서/bin/sh를 사용하면/bin/sh가 configure-typical 테스트를 매우 느리게 처리하기 때문에 빌드를 오래 사용할 수 있습니다. (새로운 버전으로 수정 될 수도 있습니다. 특정 문제가 발생했을 때부터 시간이 걸렸습니다.) – DevSolar

2

Autoconf는 "어디서나"실행할 수있는 스크립트를 생성하여 이식성 문제를 해결해야합니다.

if test X$foo = X ; then ... # check if foo is empty 

보다는 :

if [ "$x" = "" ] ; then ... 

아마 한 번이 스크립트는 고대 Ultrix 모델 시스템 또는 어떤에서 실행할 수 crufty 코드의 종류가 같은 이상한 코드를 생성하는 이유입니다.

쉘 차이로 인해 실행되지 않는 configure 스크립트는 10 리터의 가스와 3 개의 여분 타이어가있는 Formula-1 경주에 오는 것과 같습니다.

Autoconf를 사용하여 configure 스크립트를 개발 중이고 쉘이 Bash 또는 OSX 쉘인지 여부에 민감한 경우 잘못된 작업을 수행하거나 Autoconf 사용자가 무언가를 파기했습니다. 그것이 여러분에게서 나온 것이라면, 스크립트에 추가 할 쉘 조각을 휴대 가능하게 만들어 수정하십시오.

+0

' "$ foo"'대신''x $ foo ''('x' 접두어 외에 큰 따옴표를 사용) 빈 문자열과 아무 관련이 없습니다. "$ foo"가'-f'와 같은 테스트 옵션처럼 보이는 것으로 평가되는 경우와 관련이 있습니다. – adl

관련 문제