2017-12-19 4 views
1

Versuch interpretiert werden, auf die neueste Version von SBT GitHub herunterladen:Ergebnis bash Ausdruck nicht als String

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

version wird auf v1.1.0-RC2

Dann versucht, die TAR herunterladen gz Paket:

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

statt der richtigen URL

jedoch:

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

Irgendwie ist die Versionszeichenfolge als Befehl interpretiert wird (?!), was zu:

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

Wenn ich manuell version="v1.1.0-RC2" gesetzt das passiert nicht.

Vielen Dank im Voraus!

+0

Es ist absolut Teil des Strings - es ist nur eine Zeichenfolge, die eine Sequenz enthält, die den Cursor auf der Vorderseite der Linie zurückschickt, so, wenn es gedruckt, es * sieht so aus * als würde es den Befehl überschreiben. Bedeutet nicht, dass so etwas tatsächlich passiert. –

+0

Danke @BenjaminW.! Hinzufügen eines '| sed 's/\ r // g' 'am ende fixierte es. – vivri

+0

BTW, dies ist buchstäblich die allererste Sache in der "vor der Frage über problematischen Code" Abschnitt in der ['bash' Tag Wiki] (https://StackOverflow.com/Tags/Bash/info). –

Antwort

1

Sie sollten -I Flagge in curl Befehl und ein viel einfacher Pipeline Versionsnummer wie diese greifen:

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

v1.1.0-RC2 

Auch Verwendung von sub Funktion beachten \r vom Ende der Linie der curl Ausgang abzustreifen .

Ihr Skript:

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 
Verwandte Themen