2012-06-30 6 views
5

여러 원격 서버에 로그인하고 각 서버에서 스크립트를 실행하는 스크립트를 작성하려고합니다. 그러나 ssh를 통해 변수를 전달하고 싶습니다. 다음과 같은 것 :ssh를 통해 변수 전달하기

var="/home/dir/" 

    ssh -T $mchname <<'ENDSSH'  
    $var"run_script" <input> output &  
ENDSSH 

이 간단한 시도 ($ var는 null)입니다. 올바른 구문은 무엇입니까? 미리 감사드립니다.

답변

4

ENDSSH에서 따옴표를 제거하십시오. 그들은 here document 내의 변수 확장을 방지합니다.

+0

좋아,이 작동합니다. 하지만 이제는 컨트롤이 단지 "run_script"가 $ mchname ("& '를 사용하고 있어도)에서 끝나면 주 스크립트로 돌아갑니다. 이것은 내가 원하지 않는 것입니다. 어떻게 해결할 수 있습니까? 기본적인 질문은 죄송합니다. 원한다면, 내가 이것을 좀 볼 수있는 ssh 튜토리얼을 가르쳐 줄 수있다. 감사. – user1477337

+0

@ user1477337 : 앰퍼샌드는 대상 컴퓨터에 적용되며 'run_script'가 완료 될 때까지 기다릴 필요가 없기 때문에 컨트롤이 주 스크립트로 더 빨리 반환된다는 것을 의미합니다. 그러나'ssh' 명령과 그 문서 이후에 아무것도 없기 때문에'ssh' 연결이 닫히 자마자 즉시 주 스크립트가 종료되어야합니다.이 스크립트는 거의 즉시 이루어져야합니다. 그러나 필요한 이유가 있다면'ssh' 명령에'exec' 접두어를 붙이면됩니다 :'exec ssh ...'이 모든 것은 쉘과 관련이 있으며'ssh '에만 국한되지 않습니다. –

2

이 시도 :

var="/home/dir/" 

    ssh -T $mchname VAR=$var 'bash -s'<<'ENDSSH'  
    $VAR"run_script" <input> output &  
ENDSSH