2016-07-03 3 views
0

SSH를 통해 원격 서버에서 일부 셸 스크립트를 실행하려고합니다.SSH를 통한 원격 셸 스크립트 실행 내 변수 할당

ssh -i $KEYFILE_PATH [email protected]$TARGET_INSTANCE_IP "bash" << EOF 
#!/bin/bash 
cat /home/ubuntu/temp.txt 
string=$(cat /home/ubuntu/temp.txt) 
echo $string 
EOF 

고양이가 예상 결과 만 $string 인쇄 아무것도를 인쇄 : 아래

은 코드 샘플입니다.

변수에 cat의 반환 값을 저장하려면 어떻게해야합니까?

답변

1

Here doc 리터럴의 내용을 만들어야합니다. 그렇지 않으면 원하는 원격 쉘이 아닌 현재 쉘에서 확장됩니다.

견적 EOF :

ssh .... <<'EOF' 
... 
... 
EOF 
+0

시도해 보았습니다! 불운 !! –

+0

@Silent_Rebel'/ home/ubuntu/temp.txt' 파일은 어디에 위치해 있습니까? 로컬 또는 리모트? – heemayl

+0

거기에 원격 서버 .. –

1

하는 당신은 간단하게이 작업을 수행 할 수 있어야한다 :

ssh -i $KEYFILE_PATH [email protected]$TARGET_INSTANCE_IP "bash" <<'_END_' 
    cat /home/ubuntu/temp.txt 
    string=$(cat /home/ubuntu/temp.txt) 
    echo $string 
_END_ 

<<'_END_' ... _END_Here Document 문자, 또는 "히어 닥"문자라고합니다. '_END_' 주위의 작은 따옴표는 로컬 셸이 heredoc 내에서 변수와 명령을 해석하지 못하게합니다.

0

중간 셸이 필요하지 않습니다 (원격 시스템에서 bash을 사용한다고 가정). 또한 중간을 사용하지 않아도됩니다. 여기 DOC. 그냥 다중 행 명령을 전달하십시오.

ssh -i $KEYFILE_PATH [email protected]$TARGET_INSTANCE_IP ' 

cat /home/ubuntu/temp.txt 
string=$(cat /home/ubuntu/temp.txt) 
echo $string 
' 

참고 작은 따옴표를 사용하여 로컬 셸에서 평가되지 않도록합니다.