如何在Bash函数中将curl的Content-Type请求头设置为可选
实现方案
不用改动原有函数的核心结构,也不会破坏现有的调用逻辑,只要给Content-Type加个带默认值的可选参数即可:
- 用Bash原生的变量默认值语法,未传入自定义Content-Type时自动 fallback 到
application/json,和原有逻辑完全一致 - 把硬编码的Content-Type请求头换成变量引用,顺便修复原代码里
$SCHEMA未加双引号容易被特殊字符、空格拆分解析错误的小问题,去掉冗余的| cat管道(grep本身就能直接处理标准输入,多接cat无实际作用)
修改后的完整代码:
function uploading_topic { # 第一个入参为可选自定义Content-Type,默认值为application/json local CONTENT_TYPE=${1:-"application/json"} echo -e "\n\n+++ Uploading $TOPIC +++" curl --location --request POST "https://$PULSAR_HOST:$HOST_PULSAR_PORT/admin/v2/schemas/$TENANT/$NAMESPACE/$TOPIC/schema" \ --verbose \ --header "Authorization: Bearer $AUTHORIZATION" \ --insecure \ --header "Content-Type: $CONTENT_TYPE" \ --data-raw "$SCHEMA" 2>&1 | grep "HTTP" # grep -v "Authorization" }
调用方式
- 上传普通JSON格式Schema时,和之前的调用方式完全一致,直接执行
uploading_topic即可,不需要传任何额外参数,行为和修改前没有区别 - 上传非JSON格式Schema时,把对应的Content-Type作为第一个参数传入即可,比如上传Avro格式Schema的调用示例:
uploading_topic "application/vnd.apache.avro+json"
如果是Protobuf、KeyValue等其他类型Schema,替换成Pulsar要求的对应Content-Type值即可。
内容的提问来源于stack exchange,提问作者Hofbr
相关产品推荐
相关产品推荐

