関数を作成しました。
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