我对Git临时配置有疑问。
我需要在标签发布或任何提交中传递标签名称,例如
#!/bin/bash
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
curl -X POST "https://en4c6i2k7daz5.x.pipedream.net/" \
-H 'Content-Type: application/json' \
-d '{"version": "$refname"}'
done
我得到的结果(请参阅https://requestbin.com/r/en4c6i2k7daz5/1cxY1mJeMlejAnF0OJ8B8iCd6sl)
{"version": "$refname"}
因此由于某种原因,它没有发送标记名称($refname
的值)-脚本中出了什么问题?
答案 0 :(得分:1)
您正在单引号数据,存在单引号以关闭Shell的字符串构造语法,扩展和单词拆分以及其他功能。由于refname中不能包含空格或glob语法,因此我认为您无需引用扩展名就可以解决问题,但是为了安全起见,为了控制扩展,我通常会根据需要从单引号切换到双引号
-d '{"version": "'"$refname"'"}'
或者您可以只对所有双引号进行处理并转义json的多余引号,从而以这种方式来解决它们:
-d "{\"version\": \"$refname\"}"
编辑:嗯,来自git help check-ref-format
,我得到了
这些规则使基于Shell脚本的工具可以轻松解析引用名称,并通过 引用名称不加引号(错误)时使用shell,并且还避免某些引用中的歧义 名称表达式(请参见gitrevisions(7)):
即您保证根本不必引用refname扩展名。