2013-07-12 2 views
1

일부 bash 스크립트를 자동화하기 위해 expect를 사용하고 있습니다. 모든 것은 내가 소스 스크립트를 실행할 필요가있을 때까지 간다. 그러면이 오류가 발생합니다 :expect를 사용하여 소스 쉘 스크립트를 생성해야합니다.

나는 기본적인 방법으로 (spawn/expect/send/interact)를 사용합니다. 문제는 산란과 함께입니다. 'NAME'으로 환경 가치와 수출 에코의 이름을 읽을

스크립트 : 나를 아주 쉬운 예를 보여 드리죠

/home/edu/scripts [] cat setNAME.sh 
#!/bin/bash 
echo "Your name?" 
read name 
export NAME=$name 
echo "Provided NAME is $name" 

당신은 입력 값 것 '소스'를 실행하면 환경 변수로 내보낼 수 있습니다. 그냥 내가 필요한 :

/home/edu/scripts [] source setNAME.sh 
Your name? 
Dennis 
Provided NAME is Dennis 

/home/edu/scripts [] echo $NAME 
Dennis 

하자의 설정, 상호 작용을 방지하기 위해 기대 사용하는 '에듀'는 이름으로 :

/home/edu/scripts [] cat setNAME.exp 
#!/usr/bin/expect 
spawn setNAME.sh 
expect "Your name?" 
send edu\r 
interact 

/home/edu/scripts [] setNAME.exp 
spawn setNAME.sh 
Your name? 
edu 
Provided NAME is edu 

/home/edu/scripts [] echo $NAME 
Dennis 

그러나 이름, 분명히, 여전히 데니스입니다 : '에듀'가 표시됩니다 at sh 스크립트는 출력하지만 NAME으로 내 보내지는 않습니다. 왜냐하면 expect 스크립트는 setNAME.sh 스크립트를 소스없이 (또는 스크립트 전에 점으로) 생성하기 때문입니다.

문제는 처음에 오류가 발생했기 때문에이 작업을 수행 할 수 없다는 것입니다.

해결할 수있는 아이디어가 있습니까? 내 경우

스크립트는 훨씬 더 복잡하고 다른 솔루션이 같은 예를 들어 것들에 대한, 또한 무효입니다 :

내가 기대 사용하려고 해요 이유입니다
source script.sh << EOF 
<option1> 
<option2> 
... 
EOF 

...

고마워요!

+0

훌륭한 첫 번째 질문은, 미안하지만, 전문가는 아니지만'spawn source setname.csh'을 시도 했습니까? 행운을 빕니다. – shellter

+0

물론 처음으로 내가 한 일은 (미안하지만 잘 설명하지 못했습니다). 나는 그 이유를 이해하지 못하지만, 분명히 이유가있다. 나도 따옴표로 시도 : "소스