2017-02-07 3 views
2
B=master U='[email protected]' curl -u "${U}" "https://bitbucket.org/myteam/pod-dev/raw/${B}/install.bash" 

Ich werde gefragt:Warum kann ich diese Parameter nicht an meinen Befehl übergeben?

Enter host password for user '': 

See, das "U" fehlt.

Und auch curl ausgeführt:

GET /myteam/pod-dev/raw//install.bash HTTP/1.1 

Auch hier ist der B (Zweig)

macOS Sierra 10.12.2 

$ bash --version 
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16) 
Copyright (C) 2007 Free Software Foundation, Inc. 

Antwort

4

Variablen Zuweisungen wie Sie sie Teil des Befehls verwenden fehlt sind. In Ihrem Fall versucht die Shell, "${A}", "${B}" zu erweitern, bevor sie tatsächlich gesetzt wurden - während den Befehl parsing.

Sie können die Variablenzuweisungen trennen und den eigentlichen Befehl von ;:

B=master; U='[email protected]'; curl -u "${U}" "https://bitbucket.org/myteam/pod-dev/raw/${B}/install.bash" 

Auf diese Weise sind sie drei separate Befehle.

+2

Thank you! Es schien einfach wierd (wenn Sie 'X = Y./This_script.sh' verwenden), aber total vernünftig jetzt, dass Sie es sagen. – netigger

+0

Gern geschehen! – hek2mgl

2

bash wird versuchen, die Variablen zuerst zu erweitern, aber Sie haben sie nicht an diesem Punkt festgelegt. Siehe zum Beispiel:

$ x=foo echo "$x" 
> 

$ x=foo; echo "$x" 
> foo 
-1

Versuchen Sie, wie diese anstelle von Ihrem Befehl:

export B=master; export U='[email protected]' ; curl -u "$U" "https://bitbucket.org/myteam/pod-dev/raw/$B/install.bash" 
+2

Ich möchte nicht exportieren – netigger

Verwandte Themen