2013-10-28 6 views
0

... 쉘 스크립트에서 원격 서버의 원격 변수와 함께 배열을 사용하는 방법은 무엇입니까? 이것은 내가 뭘하려고 오전입니다

#!/bin/bash 

array_local=(1 2 3 4 5) 

ssh [email protected] << EOF 
index_remote=1 
echo \$index_remote 
echo \${array_local[\$index_remote]} 
EOF 

내가 1과 O/P 및 null 값 (빈 공간)을 얻을 수 위의 스크립트를 실행하려고

. $ {array_local [$ index_remote} 값을 null 대신 2로 지정하고 싶었습니다. 원격 변수를 사용하여이 로컬 배열에 액세스하여 스크립트에서 추가 작업을 수행해야합니다.

+0

어떤 셸을 사용하고 있습니까? 세게 때리다? –

+0

로컬 시스템에 정의 된 변수 ('array_local')가 원격 서버에서 실행되는 완전히 별개의 프로세스에서 다른 쉘 세션에서 여러분을 위해 마술처럼 미리 정의되어 있다고 생각하게 만드는 이유는 무엇입니까? 이 변수는'ssh'를 실행하는 쉘에 국한되어 있습니다. 적절한 인용 부호를 사용하더라도'echo'를 실행하는 쉘 인스턴스에는 설정되어 있지 않습니다 ... – twalberg

+0

@AdamSpiers 예, 그것은 bash 쉘 – user2928822

답변

0

결과 변수 확장은 로컬 시스템에서 발생하지만, 원격 컴퓨터에서 변수 i 만 정의했습니다. 확장을 원하는 위치를 신중하게 생각해야합니다. 질문에 i의 값이 클라이언트 측 또는 서버 측 중 어느 것으로 정의되었는지는 설명하지 않았지만 후속 의견에서 서버 측에서 수행하기를 원하는 것으로 추측합니다.

ssh [email protected] <<EOF 
i=1 
eval `typeset -p array_local` 
echo \${array_local[\$i]} 
EOF 

typeset -p array_local가 출력이 내부 역 따옴표이기 때문에, 클라이언트를 확장 얻을 것이다 문자열

declare -a array_local='([0]="1" [1]="2" [2]="3" [3]="4" [4]="5")' 

을 :이 경우 당신은 인용주의 요구하는 ssh 통해 배열 내용을 전달해야합니다 -side-EOF -delimited heredoc 내에서 서버 측을 eval으로 평가합니다.

ssh [email protected] <<'EOF' 
i=1 
declare -a array_local='([0]="1" [1]="2" [2]="3" [3]="4" [4]="5")' 
echo ${array_local[$i]} 
EOF 

주의 두 예제 사이에 인용 EOF의 차이 : 즉 그것과 동일합니다. 첫 번째는 매개 변수와 셸 확장을 허용하고 두 번째 매개 변수는 매개 변수와 셸 확장을 허용하지 않습니다. 그렇기 때문에 첫 번째 클라이언트의 echo 행에 인용 부호가 필요하므로 클라이언트 측이 아닌 서버 측에서 매개 변수 확장이 수행됩니다.

+0

나는 그것을 이해하지만 주위에 어떤 방법을 알아낼 수 없다, 나는 'EOF'를 사용하여 시도했다. 그것은 내 array_local을 널 것으로 명백하게 만든다. 나는 나의 로컬과 리모트 모두에 접근 할 수있는 방법을 찾고있다. 명령 내 변수 ... 그렇게 생각하는 것은 내 소설일까요? 아니면 정말로 가능합니까 ?? – user2928822

+0

절대적으로 가능하며 (심지어 어렵지도 않음), 아직 성취하려는 것을 명확히 설명하지 못했습니다. –

+0

나는 당신이 묻고있는 것을 추측하고 나의 대답을 확장했습니다. –