我需要将用户凭据插入到 HTTP 字符串中,以便我可以正确填充位于 的 git 凭据文件~/.git-credentials
。
这是我必须开始的三个环境变量:
user="someUser"
pass="somePass"
uri="http://sometld.org/path/repo.git"
我一直在摆弄awk
,但它只适用于 Github 风格的克隆路径 ( https://github.com/org/repo.git
),不适用于非标准路径 ( https://git.private.org/scm/~user/path/repo.git
):
proto=$(echo $uri | awk -F"/" '{print $1}')
domain=$(echo $uri | awk -F"/" '{print $3}')
repo_path=$(echo $uri | awk -F"/" '{print $4}')
repo_name=$(echo $uri | awk -F"/" '{print $5}')
echo "$proto//$user:$pass@$domain/$repo_path/$repo_name"
# http://someUser:[email protected]/path/repo.git
将用户名和密码插入 HTTP 字符串以便填充我的~/.git-credentials
文件的最佳/最简单方法是什么?
答案1
$ sed -e "s^//^//$user:$pass@^" <<<$uri
http://someUser:[email protected]/path/repo.git
这会替换字符串中//
的,并且可以在任何地方使用。//$user:$pass@
$uri
具体在 Bash 中:
$ echo ${uri/\/\////$user:$pass@}
http://someUser:[email protected]/path/repo.git
将执行相同的替换- 这只是${variable/pattern/replacement}
,但有必要转义模式中的斜杠,因为我们无法更改此处的分隔符。