Geben Sie BefehlszeilenArgumente wie name=Wert-Paare für shell-Skript
Ist es möglich, übergeben Sie Befehl Linie Argumente, um shell-Skript als name-Wert-Paare, so etwas wie
myscript action=build module=core
dann in meinem Skript, Holen Sie die variable wie
$action
Sie und verarbeiten Sie es?
Ich weiß, dass $1....und so weiter, kann verwendet werden, um get-Variablen, aber dann nicht sein name-Wert Paaren. Auch wenn Sie sind, dann werden die Entwickler das Skript kümmern sich um das deklarieren von Variablen in der gleichen Reihenfolge. Ich will nicht, dass.
Ich denke, deine Antwort ist hier: stackoverflow.com/questions/2642707/...
Ja, im Gegensatz zu den bash-builtin
Ich denke, sowas ist nur für die bash.Sorry, ich wollte nicht angeben, Im mit tcsh.
Ja, im Gegensatz zu den bash-builtin
getopts
, getopt
arbeitet mit tcsh als gut.Ich denke, sowas ist nur für die bash.Sorry, ich wollte nicht angeben, Im mit tcsh.
InformationsquelleAutor Neeraj | 2011-03-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Bourne-shell, es ist eine selten verwendete option'
-k
", die automatisch alle Werte angegeben alsname=value
auf der Kommandozeile in die Umgebung. Natürlich, die Bourne - /Korn - /POSIX-shell-Familie (einschließlich bash) machen das auch fürname=value
Elemente, bevor Sie den Befehl name:Unter normalen POSIX-shell Verhalten, die
command
aufgerufen wird, mitname1
undname2
in der Umgebung, und mit vier Argumenten. Unter der Bourne-Shell (und der Korn-und bash, aber nicht POSIX) shell --k
option, Sie wird aufgerufen mitname1
,name2
,name3
, undname4
in der Umgebung und nur zwei Argumente. Diebash
Handbuch Seite (wie inman bash
) nicht erwähnt, das äquivalent von-k
aber es funktioniert wie in der Bourne-und Korn-shells tun.Ich glaube nicht, dass ich je benutzt habe (die
-k
option) ernst.Gibt es keine Möglichkeit zu sagen, aus dem script (
command
), dass die Umgebungsvariablen angegeben wurden, die ausschließlich für diesen Befehl; Sie sind einfach die environment-Variablen in der Umgebung des Skripts.Dies ist die größte Annäherung ich weiß, um was Ihr bittet. Ich glaube nicht, dass alles gleichwertig existiert für die C-shell-Familie. Ich kenne kein anderes argument-parser, der Sätze von Variablen aus
name=value
Paare auf der Kommandozeile.Mit einigen ziemlich großen Vorbehalte (es ist relativ einfach für einfache Werte, aber schwer zu tun mit Werten, die mit der shell-meta-Zeichen), die Sie tun können:
Dies ist nicht der C-shell-Familie. Die
eval
effektiv ist die shell-Zuweisung.name=value command
. Aber ich kann nicht finden eine Erklärung inman bash
. Gibt es irgendeinen Mann Seite dies zu dokumentieren?Ich fand es in
man bash
: Die Umwelt für jedes einfache Kommando oder die Funktion kann erweitert werden, vorübergehend, indem Sie mit dem parameter-Zuordnungen, wie oben beschrieben, die in den PARAMETERN. Diese Zuordnung Aussagen betreffen nur die Umwelt gesehen, die von diesem Befehl.InformationsquelleAutor Jonathan Leffler
Dieser arbeitete für mich:
Nutzung
Console Ergebnis :
SCHRITTE und REPOSITORY_NAME sind bereit für den Einsatz in der script.
Ist es nicht egal in welcher Reihenfolge die Argumente sind.
HTH
InformationsquelleAutor JRichardsz
Du hast gesagt, du bist mit tcsh. Für die Bourne-basierte shells, drop können Sie den "env", obwohl es harmlos ist, es dabei zu belassen. Beachten Sie, dass dies gilt für die shell, von der aus Sie den Befehl ausführen, nicht auf der shell zu implementieren
myscript
.Wenn Sie ausdrücklich möchten, dass der name=Wert-Paare Folgen der name des Befehls, den Sie brauchen, um einige Arbeit zu tun im inneren
myscript
.InformationsquelleAutor Keith Thompson
Sich auf Jonathan ' s Antwort, dies funktionierte gut für mich:
InformationsquelleAutor Xavier