%20%ED%95%A8%EC%88%98%EC%9D%98%20%EC%B6%9C%EB%A0%A5%20%EC%82%AC%EC%9A%A9.png)
함수를 만들었어요
function getqueue() {
urlqueuename="urlcall"
ouput=`curl $urlqueuename`
queue=$(echo $ouput | jq -r '.queueName')
echo $queue
}
다음과 같은 스크립트에서 SSH 호출을 사용하고 있습니다.
ssh -T -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i "$HOME_DIR/<pemfile>" $username@$IP<<EOF
queue=$(getqueue)
echo "Queue name : $queue"
EOF
하지만대기줄비어 있습니다. $(typeset -f)
원격 호출에서도 함수를 사용해 보았으나 변수가 여전히 비어 있습니다.
이와 관련된 모든 지침을 높이 평가하겠습니다.
답변1
여기의 문서는 참조되지 않습니다. 즉, 문서가 작성될 때 변수 확장 및 명령 대체가 로컬로 수행된다는 의미입니다. 이 경우에는 다음과 같이 끝나기 때문에 원하는 효과를 얻지 못할 것입니다.
queue=somevalue
echo "Queue name : "
즉, 변수의 값을 설정하는 스크립트로 확장되지만 queue
변수는 인쇄된 문자열 내에서도 확장되므로 echo
실행 시 올바른 값이 표시되지 않습니다.
ssh
이 확장은 호출되기 전에도 완료됩니다.
curl
원격 호스트에서 호출 등이 이루어져야 하는 경우 (그렇지 않으면 실제로 doc-here 스크립트를 보낼 이유가 없거나 ssh
호출할 이유가 전혀 없음) doc-here를 참조하십시오. 를 사용하여 이를 수행할 수 있습니다 <<'EOF'
.
getqueue
그러나 이는 원격 스크립트 환경에서 함수를 정의해야 함을 의미하기도 합니다 . 여기 문서에 기능을 포함하거나 필수 섹션을 선택해야 합니다.
이 기능은 기본적으로
curl urlcall | jq -r '.queueName'
넌 할 수있어
ssh -T -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i "$HOME_DIR/<pemfile>" "$username@$IP" <<'REMOTE_SCRIPT'
queue=$(curl urlcall | jq -r '.queueName')
printf 'The queue name is "%s"\n' "$queue"
REMOTE_SCRIPT
일부 확장은 로컬에서 수행되어야 하고 다른 확장은 원격으로 수행되어야 하는 경우아니요여기에 문서를 인용하되 $
원격으로 확장해야 하는 내용은 피합니다. 예를 들어,
ssh user@server <<SCRIPT
remote_var=\$( something )
printf 'remote_var = "%s", local_var = "%s"\n' "\$remote_var" "$local_var"
SCRIPT
위의 예에서는 remote_var
원격으로 설정되고 있습니다. 우리는 이 문서에 값을 할당할 수 없습니다 ( 위와 같은 이유로 이를 local_var
사용할 수 있을 것으로 예상합니다 ). 그러나 호출은 이 변수가 여기에 있었을 때의 값을 인쇄합니다. 문서는 확장되었습니다(직전 호출 ).$local_var
printf
ssh