2012-10-08 2 views
3

스크립트를 원격으로 실행해야합니다. 다음 쉘 스크립트를 사용하고 있습니다.셸 스크립트를 사용하여 원격으로 로컬 스크립트 실행하기

for server in $servers 
    do 
    LOCAL_VAR=<some_value> 
    ssh $server <<EOF 
     command1 $LOCAL_VAR 
     command2.. 
     .. 
     exit 
     EOF 
    done 

bash에서 예기치 않은 파일 구문 오류가 발생했습니다. 이 블록을 제거하면 나머지 코드가 제대로 작동합니다. 원격으로 스크립트를 실행하는 정확한 방법을 알려주시겠습니까?

+0

'EOF'가 들여 쓰기되어 있습니까? 그것은해서는 안됩니다. –

+0

예. 스푸트니크의 솔루션은 완벽하게 작동했습니다. –

답변

2

당신이 당신의 here-doc에 같은 들여 쓰기를 넣어하려는 경우, 다음과 같은 코드 같은 -을 추가해야합니다 : 탭

for server in $servers 
do 
    LOCAL_VAR=<some_value> 
    ssh $server <<-EOF 
    command1 $LOCAL_VAR 
    command2.. 
    .. 
    exit 
    EOF 
done 
이 붙여 넣기 복사 할 때

주의, 때때로 당신이 가질 수있는 놀라움 또는 공백.

1

heredoc을 닫는 EOF에 선행 공백이 없어야합니다. Bash는 스크립트의 끝을 찾기 전에 문자열의 끝에 도달했다고 생각하지 않습니다.

닫는 제한 문자열

http://tldp.org/LDP/abs/html/here-docs.html

하는 여기에 문서의 마지막 줄에, 첫 번째 문자 위치에서 시작해야합니다. 선행 공백은 없을 수 있습니다. 제한 문자열 뒤의 공백을 뒤따라도 마찬가지로 예기치 않은 동작이 발생합니다. 공백은 제한 문자열이 인식되는 것을 방지합니다.

+1

예, POST를 참조하십시오.) –

+0

흥미 롭습니다. 나는 그것을 몰랐다. – jimp

1

해결 방법은 스크립트의 열 1에 리터럴 레이블이 있어야합니다. tl; dr 리터럴 레이블 (EOF)에 들여 쓰기 없음

관련 문제