在下面的脚本中,我生成一个状态代码,如果 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 函数这里。您可以使用 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