2011-02-08 3 views
0

오랫동안 본 가장 미친 짓이라고 말할 수 있습니다.Linux/Unix Scripting - 몇 줄에서 이상한 동작 - 가변적이지만 비어 있음

나는 쉬 스크립트에 CentOS 5.4에서 실행이 (의 일부)가 :

# Check GOLD_DIR` 
echo $GOLD_DIR"<--" 
#export GOLD_DIR=/share/apps/GOLD_Suite/GOLD <uncommenting this line works!! 
if [ "X$GOLD_DIR" = "X" ] ; then 
    echo "ERROR: GOLD_DIR is (probably) not set on host ${HostName}" >> ${3} 
    exit 1 
fi 

을 그리고 이것은 다음과 같은 출력을 제공합니다 : 당신이합니다 (GOLD_DIR 변수가 설정되어 볼 수 있듯이

/share/apps/GOLD_Suite/GOLD<-- 
Waiting for 5 seconds ..... Testing output 

The test script did spawn a job (i.e. PVM ran OK), 
but errors were detected in the test script output 
on the host machine: Below is the output 

ERROR: GOLD_DIR is (probably) not set on host xxx.yyy.local 

을 스크립트는 출력 결과에 "<--"이 붙어있는 것을 찾습니다. 스크립트 코드 (첫 번째 스 니펫)에 변수 GOLD_DIR의 내보내기를 주석 처리하지 않으면 모든 것이 작동합니다.

편집 : GOLD_DIR/etc/profile에 수출되고

어떤 아이디어 왜 (export GOLD_DIR=/share/apps/GOLD_Suite/GOLD 사용)?

주 1 : 중요한지는 모르지만 PVM의 스폰 스크립트입니다.

주 2 : 스크립트는 쉬 #!/bin/sh로 작성하지만 떠들썩한 파티를 사용하고 ...

EDIT3을 : 나는 그것이 작동에 도착하지만 내가 왜 몰라! - 좋아, 내가 한 일은 호스트 이름 (sudo hostname abc)을 내가 ssh에 넣은 컴퓨터의 이름으로 바꾼 것입니다 (예 : abc). PVM이 기계 abc.mycompany.local의 전체 이름을 나열하기 전에. abc.mycompany.localabc은 모두 같은 시스템입니다.

답변

0

그래서 var가 설정됩니다. 값을 설정하지 않고 주석 행 대신 export GOLD_DIR을 수행하면 작동합니까?

또한. 고립 된 사건인가요? CentOS에 bash가 있습니까? [[]]을 사용하여 올바르게 작동하는지 확인하십시오.

+0

아니요 작동하지 않습니다. 나는 진술 바로 뒤에 echo를하면 변수 내용을 볼 수 있지만 여전히 오류가 발생한다. ... ... bit. – MalteseUnderdog

+0

나는 bash를 사용하고있다. 그러나 스크립트 shbang은 #!/bin/sh이다. 나는 [] 대신 [[]]로 바 꾸었으므로 나는 여전히 실수 오류를 낳는다. – MalteseUnderdog

+0

@MalteseUnderdog : 변수 값이 아마도 무언가이다 ...'declare -p' 할 수 있니? 의심스러운 것이있을 수 있습니다. 작업 내보내기 GOLD_DIR = blabla를 할당으로 나눈 다음 내보낼 경우 변경됩니까? 또한 POSIXLY_CORRECT envvar와 같이 POSIX 모드로 시도하십시오. 조건을'[-z "$ GOLD_DIR"]'으로 변경하면 작동할까요? –

0

저는 그것이 작업의 비 대화식 특성과 관련이있을 것이라고 생각합니다. 쉘 스크립트에서 실행되는 작업은 반드시/etc/profile을 제공 할 필요가 없으므로 $ {GOLD_DIR} 변수를 가져 오지 않을 수도 있습니다. (. 당신이 명시 적으로 행동을 변경했습니다 않는 한, bash는 로그인 쉘에만 소스/등은/프로필 것)

봅니다 추가 :

. /etc/profile 

을 스크립트의 시작 부분에 그 변경되는 경우 만보고 아무것도. 그렇지 않다면 오류 문을 에코 할 때 어딘가에 $ {GOLD_DIR}을 추가하여 그 문에서 여전히 변수가 사용 가능한지 확인하십시오.