쉘: 컬 표현식 평가

쉘: 컬 표현식 평가

아래 스크립트에서는 상태 코드를 생성하고 statusCode=200이면 데이터를 보냅니다. 그렇지 않으면 statusCode! =200이면 토큰을 생성하고 eval "$request_cmd"를 호출하여 메시지를 보냅니다. 강력한 텍스트 하지만 실제로 이 작업을 수행하면 eval "$request_cmd" 줄에서 "command introuvable" 오류가 발생합니다.

#!/bin/bash

#variables
randomNumber=$(shuf -i000000-999999 -n1)
eventTime=$(date --rfc-3339=ns | sed 's/ /T/')
idEpc="OneVariable"
fromRecordtime=`date --utc +%FT%T.%3NZ`
goodStatus="200"


printf "\n ---------------------------------> SENDING MESSAGE <-------------------------------------- \n\n"

request_cmd=$(curl -X POST -w "%{http_code}" --http1.0 \
"$1/api/acquire/rabbitmq/epcis" \
-H 'Authorization: Basic YWtytrytrytrytrW46trttrytrytr' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: text/xml' \
-H 'Postman-Token: 2c4f9rtertzertertrezatre4' \
-H "X-Authorization: Bearer ${generatedToken}" \
-d 'Here i have the data')
echo $request_cmd

if [ "$request_cmd" != "$goodStatus" ]
then
    printf "\n ---------------------------------> GETTING TOKEN <-------------------------------------- \n\n"
    generatedToken=$(curl -X POST $2/MyURL/token -H 'Cache-Control: no-cache' -H 'Content-Type: application/x-www-form-urlencoded' -d 'grant_type=client_credentials&client_secret=abesdfsd677c-6dsdfsba-4ddfsc8-978fsdfdsfsb-ec256cf65914&client_id=che-gateway' | jq -r .access_token)
eval "$request_cmd"
echo $request_cmd

답변1

여기에는 몇 가지 문제가 있습니다.

아래 스크립트에서는 statusCode=200인 경우 상태 코드를 생성합니다.

그것은 귀하의 코드가하는 일이 아닙니다. 또한 상태 코드를 배치합니다.그리고변수에 있는 모든 문서를 반환합니다 $request_cmd. 문서가 비어 있으면 지금은 문제가 발생하지 않을 수 있지만 약간 엉성합니다.

바라보다https://superuser.com/questions/272265/getting-curl-to-output-http-status-code

statusCode !=200이면 데이터를 보내고, 그렇지 않으면 토큰을 생성하고 eval "$request_cmd"를 호출하여 메시지를 보냅니다.

이것은 귀하의 코드가 수행하는 작업이 아닙니다. 처음으로 컬을 실행했는데 "401 Unauthorized"와 같은 결과가 반환되었다고 가정해 보겠습니다. eval은 "401" 명령을 실행하려고 시도하지만 이를 호출할 명령이 없습니다.

사용한다는 뜻인 것 같아요배쉬 기능여기. Bash 함수를 사용하여 동일한 코드를 여러 번 실행할 수 있습니다.

내가 의미하는 바의 예는 다음과 같습니다.

function request_cmd {
status_code=$(curl -s -o /dev/null -X POST -w "%{http_code}" --http1.0 \
"$1/api/acquire/rabbitmq/epcis" \
-H 'Authorization: Basic YWtytrytrytrytrW46trttrytrytr' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: text/xml' \
-H 'Postman-Token: 2c4f9rtertzertertrezatre4' \
-H "X-Authorization: Bearer ${generatedToken}" \
-d 'Here i have the data')
echo $status_code
}
request_cmd # calls curl and puts result into $status_code
generatedToken=foo # changes the value of generatedToken
request_cmd # calls curl again with new generatedToken value

관련 정보