2010-08-03 6 views
4

현재 서버 (RHEL4)에서 작동중인 bash 스크립트로 작업하고 있습니다. Ubuntu 10.04를 사용하여 노트북을 개발하고 있지만 플랫폼이 문제를 일으키는 것으로 생각하지 않습니다.Bash 구문 오류 : "[[: 찾을 수 없습니다."

여기에 무슨 일이 있습니다 : 대부분의 작업을 수행하는 다른 스크립트를 호출하는 스켈레톤 스크립트가 있습니다. 그러나 getConfig.sh를 많이 호출합니다. getConfig.sh는 기본적으로 (getopts를 사용하여) 일부 명령 행 인수를 구문 분석하고 Java 프로그램을 호출하여 일부 XML 파일을 구문 분석합니다. 어쨌든 getConfig.sh는 많은 오류를 던지고 있습니다 (그러나 여전히 작동하는 것처럼 보입니다). 여기

내가 그 세 오류가 실행될 때마다 얻을 내가

getconfig.sh: 89: [[: not found
getconfig.sh: 89: [[: not found
getconfig.sh: 94: [[: not found

받고 있어요 메시지입니다; 그러나 스크립트가 완료되고 Java 코드가 실행됩니다.

가 여기 relavent 코드 섹션을의

parseOptions $* 

if [[ "${debugMode}" == "true" ]] ; then 
    DEBUG="-DDEBUG=true" 
    echo "${JAVA_HOME}/bin/java ${DEBUG} -Djava.endorsed.dirs=${JAXP_HOME} -jar $(dirname $0)/GetXPath.jar ${XML_File} ${XPath_Query}" 
fi

라인 89 "parseOptions $ * 라인 (94)은"이다 Fi를 "답변에 대한

감사합니다.

는 스크립트가 실행 가능
+0

는 버그 - 그것은 "'네 agruments에'"인수 ""하나 ""인수 "두 개의 인수'"인수 하나 ""인수 두 가지를 변경할 수 있습니다 "두". 대신''$ @ "'을 사용하십시오. –

답변

26

경우와 ./getconfig.sh처럼 실행 중이면 스크립트의 첫 번째 줄은 다음과 같아야합니다.

#!/bin/bash 

허벌 라인이 없으면 스크립트는 sh으로 해석되어 [[if 문으로 해석 할 수 없습니다.

그렇지 않으면 bash getconfig.sh, 이 아닌sh getconfig.sh과 같은 스크립트를 실행해야합니다. 기본 셸이 bash 인 경우에도 sh으로 실행되는 스크립트는 POSIX 표준을보다 잘 준수하기 위해 축소 된 bash 기능 집합을 사용합니다. [[은 사용할 수없는 기능 중 하나입니다.

+1

데니스에게 감사드립니다. 원래이 코드를 작성한 dufus는 모든 스크립트에서 #!/bin/sh를 사용했습니다. 나는 이것을 바꾸는 것을 놓쳤다. – Justin

+0

나는이 동일한 문제를보고 있지만 스크립트 맨 위에'#!/bin/bash'가 있습니다. – prolink007

+6

나는 문제를 알아 냈다. 다른 스크립트에서 스크립트를 호출하는 경우'sh nameofscript.sh' 대신'bash nameofscript.sh'를 사용하고 있는지 확인하십시오. – prolink007

0

평등을 확인하는 경우 해당하지 않아야합니까?

제쳐두고,`$의 *`으로

if [[ "${debugMode}" = "true" ]]; then .... fi

+0

Bash에서는이 문맥에서'=='와'='는 서로 바꿔 쓸 수 있습니다. –

관련 문제