Gibt es eine einfache Möglichkeit, benannte Parameter an ein Shell-Skript zu übergeben (zu empfangen)?
Zum Beispiel,
my_script -p_out '/some/path' -arg_1 '5'
Und im Inneren my_script.sh
erhalten sie als:
# I believe this notation does not work, but is there anything close to it?
p_out=$ARGUMENTS['p_out']
arg1=$ARGUMENTS['arg_1']
printf "The Argument p_out is %s" "$p_out"
printf "The Argument arg_1 is %s" "$arg1"
Ist das in Bash oder Zsh möglich?
bash
shell-script
zsh
arguments
Amelio Vazquez-Reina
quelle
quelle
Antworten:
Die wahrscheinlich nächstliegende Syntax lautet:
quelle
-k
Option in der aufrufenden Shell festgelegt ist,my_script p_out='/some/path' arg_1='5'
hat dies den gleichen Effekt. (Alle Argumente in Form einer Zuweisung werden der Umgebung hinzugefügt, nicht nur die Zuweisungen vor dem Befehl.)x=42 echo $x; echo $x
Was bedeutet, dass bei der nächsten Ausführung vonmy_script
, wennp_out
weggelassen, der beim letzten Mal übergebene Wert beibehalten wird !! ('/some/path'
)unset
nach der ersten Ausführung zurücksetzen, bevor die nächste Ausführung?x=42 echo $x
gibt nicht einmal etwas aus, wenn$x
es vorher nicht definiert wurde.Wenn es Ihnen nichts ausmacht, sich auf Argumentnamen mit nur einem Buchstaben zu beschränken, können
my_script -p '/some/path' -a5
Sie in bash die eingebaute Funktion verwendengetopts
, zDann kannst du machen
Es gibt ein hilfreiches kleines getopts-Tutorial, oder Sie können es
help getopts
an der Shell-Eingabeaufforderung eingeben .quelle
i
undd
). Wenn ich es mitmy_script -i asd -d asd
starte, bekomme ich eine leere Zeichenkette für dasd
Argument. Wenn ich es laufenmy_script -d asd -i asd
lasse, erhalte ich leere Zeichenkette für beide Argumente.Ich habe dies von drupal.org gestohlen , aber Sie könnten so etwas tun:
Der einzige Nachteil ist, dass Sie die Syntax verwenden müssen
my_script --p_out=/some/path --arg_1=5
.quelle
-c|--condition)
Ich benutze dieses Skript und arbeite wie ein Zauber:
Verwendungszweck
Konsolenergebnis:
STEPS und REPOSITORY_NAME können jetzt im Skript verwendet werden.
Es spielt keine Rolle, in welcher Reihenfolge die Argumente stehen.
quelle
Mit würden
zsh
Sie verwendenzparseopts
:Aber Sie würden das Skript mit aufrufen
myscript --p_out foo
.Beachten Sie, dass
zparseopts
es nicht möglich ist, lange Optionen oder die--p_out=foo
Syntax von GNU abzukürzengetopt(3)
.quelle
[]
2 Gedankenstriche sind? Macht keinen Sinn!info zsh zparseopts
für DetailsIch habe mir gerade dieses Skript ausgedacht
übergeben Sie es wie
my_script --p_out /some/path --arg_1 5
und dann im Skript können Sie$arg_1
und verwenden$p_out
.quelle
v=``echo ${1} | awk '{print substr($1,3)}'`` typeset $v="$2"
(Entfernen Sie ein Backtick pro Seite)Wenn eine Funktion oder eine Anwendung mehr als null Argumente hat, hat sie immer ein letztes Argument.
Wenn Sie Optionsflag- und Wertepaare lesen möchten, wie in:
$ ./t.sh -o output -i input -l last
Und Sie möchten eine variable Anzahl von Option / Wert-Paaren akzeptieren,
Und will keinen riesigen "wenn ... dann ... sonst ... fi" -Baum,
Nachdem Sie auf eine Argumentanzahl ungleich Null und gerade geprüft haben,
Schreiben Sie eine while-Schleife mit diesen vier eval-Anweisungen als Rumpf, gefolgt von einer case-Anweisung mit den beiden Werten, die bei jedem Durchlauf der Schleife ermittelt werden.
Der knifflige Teil des Skripts wird hier gezeigt:
quelle
Sie haben gerade Befehlszeilenparameter in den Gültigkeitsbereich des Skripts eingefügt !!
quelle
-a 1 -b mitsos -c karamitsos