我需要从curl
发出的中提取:
- bash 错误消息带有非零
?$
返回代码,以防我的命令严重失败 - 所联系的服务器返回的http状态码
- 伴随非 20x 状态代码的错误消息
- 命令的输出消息
并将所有四个分派到四个不同的变量中。
这是我可以做的,通过以下请求创建一个工作区(如果它不存在):
URL=$1
USER=$2
PASSWORD=$3
WORKSPACE=ecoemploi
# Créer un workspace ecoemploi (workspace par défaut)
CREATE_WORKSPACE_JSON=$(cat <<EOF
{
"workspace":
{
"name": "$WORKSPACE"
}
}
EOF
)
CREATE_WORKSPACE_RESPONSE=$(curl --silent -X POST --write-out "%{http_code}" \
-H 'Content-type: text/json' -u "$USER:$PASSWORD" \
"$URL/workspaces" -d "$CREATE_WORKSPACE_JSON")
if [ $? -ne 0 ]; then
echo "La création de workspace dans geoserver a échoué avec le code $? : $CREATE_WORKSPACE_RESPONSE"
exit $?
fi
echo "$CREATE_WORKSPACE_RESPONSE"
curl --silent -X POST --write-out '%{http_code}' -H 'Content-type: text/json' -u admin:geoserver http://localhost:8080/geoserver/rest/workspaces -d '{"workspace": {"name": "ecoemploi"}}'
例如,发送 a 。
我需要在变量之间进行分派,因为我正在联系的服务器具有以下行为:
如果一切正常,并且工作区不存在,
echo "$CREATE_WORKSPACE_RESPONSE"
则显示:
ecoemploi201
如果目标工作区已存在,
echo
则显示:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 409 Workspace 'ecoemploi' already exists</title>
</head>
<body><h2>HTTP ERROR 409 Workspace 'ecoemploi' already exists</h2>
<table>
<tr><th>URI:</th><td>/geoserver/rest/workspaces</td></tr>
<tr><th>STATUS:</th><td>409</td></tr>
<tr><th>MESSAGE:</th><td>Workspace 'ecoemploi' already exists</td></tr>
<tr><th>SERVLET:</th><td>dispatcher</td></tr>
</table>
<hr/><a href="https://eclipse.org/jetty">Powered by Jetty:// 9.4.48.v20220622</a><hr/>
</body>
</html>
409
如果我--output /dev/null
在命令中添加 a ,它将返回:
201
409
但那么我就失去了对这两种情况的解释。
- 状态
201
代码带有在 stdout 中创建的工作区的名称 - 失败消息
409
带有一个看起来是标准输出的输出,我想知道标准错误中是什么
我如何编写一条语句来填充下一个粗体变量?
创建工作空间错误=$(curl --silent -X POST --write-outHTTP_STATUS_CODE
-H '内容类型:text/json' -u "$USER:$PASSWORD"
"$URL/workspaces" -d "$CREATE_WORKSPACE_JSON") 1>CREATE_WORKSPACE_STDOUT2>CREATE_WORKSPACE_STDERR
为了检查和撰写我愿意发送的最终用户消息,并生成$CREATE_WORKSPACE_ERROR
, $HTTP_STATUS_CODE
, $CREATE_WORKSPACE_STDOUT
,$CREATE_WORKSPACE_STDERR
变量?