bash表达式的结果无法解释为字符串[duplicate]

问题描述 投票:1回答:1

试图从GitHub下载最新的SBT版本:

version="$(curl -vsLk https://github.com/sbt/sbt/releases/latest 2>&1 | grep "< Location" | rev | cut -d'/' -f1 | rev)"

version将被设置为v1.1.0-RC2

然后尝试下载.tar.gz包:

curl -fsSLk "https://github.com/sbt/sbt/archive/${version}.tar.gz" | tar xvfz - -C /home/myuser

但是,而不是正确的URL:

https://github.com/sbt/sbt/archive/v1.1.0-RC2.tar.gz

不知何故,版本字符串被解释为命令(?!),导致:

.tar.gzttps://github.com/sbt/sbt/archive/v1.1.0-RC2

当我手动设置version="v1.1.0-RC2"时,这不会发生。

提前致谢!

linux bash curl
1个回答
1
投票

您应该在-I命令中使用curl标志,并使用更简单的管道来获取如下版本号:

curl -sILk https://github.com/sbt/sbt/releases/latest |
awk -F '[/ ]+' '$1 == "Location:"{sub(/\r$/, ""); print $NF}'

v1.1.0-RC2

还要注意使用sub函数从\r输出的行尾剥去curl

你的脚本:

version=$(curl -sILk https://github.com/sbt/sbt/releases/latest | awk -F '[/ ]+' '$1 == "Location:"{sub(/\r$/, ""); print $NF}')

curl -fsSLk "https://github.com/sbt/sbt/archive/${version}.tar.gz" | tar xvfz - -C /home/myuser
© www.soinside.com 2019 - 2024. All rights reserved.