Czy jest jakiś prosty sposób na przekazanie (odbiór) nazwanych parametrów do skryptu powłoki?
Na przykład,
my_script -p_out '/some/path' -arg_1 '5'
I w środku my_script.sh
otrzymuj je jako:
# 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"
Czy jest to możliwe w Bash lub Zsh?
bash
shell-script
zsh
arguments
Amelio Vazquez-Reina
źródło
źródło
Odpowiedzi:
Prawdopodobnie najbliższa składnia to:
źródło
-k
opcja jest ustawiona w powłoce wywołującej ,my_script p_out='/some/path' arg_1='5'
ma ten sam efekt. (Wszystkie argumenty w postaci przypisania są dodawane do środowiska, a nie tylko przypisania poprzedzające polecenie.)x=42 echo $x; echo $x
Co oznacza, że przy następnym wykonaniumy_script
, jeślip_out
zostanie pominięty, będzie się trzymać wartości przekazanej ostatnim razem !! ('/some/path'
)unset
ich po pierwszej realizacji, zresetować przed kolejną?x=42 echo $x
nawet nie wypisuje niczego, jeśli$x
nie zostało wcześniej zdefiniowane.Jeśli nie masz nic przeciwko ograniczeniu się do jednoliterowych nazw argumentów, tzn.
my_script -p '/some/path' -a5
W bash możesz użyć wbudowanegogetopts
, npTo możesz zrobić
Jest przydatny samouczek dla małych użytkowników Getopts lub można pisać
help getopts
w wierszu poleceń powłoki.źródło
i
id
). Kiedy go uruchomię,my_script -i asd -d asd
otrzymuję pusty ciągd
argumentu. Po uruchomieniumy_script -d asd -i asd
otrzymuję pusty ciąg dla obu argumentów.Ukradłem to z drupal.org , ale możesz zrobić coś takiego:
Jedynym zastrzeżeniem jest to, że musisz użyć składni
my_script --p_out=/some/path --arg_1=5
.źródło
-c|--condition)
Używam tego skryptu i działa jak urok:
Stosowanie
Wynik konsoli:
STEPS i REPOSITORY_NAME są gotowe do użycia w skrypcie.
Nie ma znaczenia, w jakiej kolejności są argumenty.
źródło
Z
zsh
użyłbyśzparseopts
:Ale wywołałbyś skrypt za pomocą
myscript --p_out foo
.Zauważ, że
zparseopts
nie obsługuje skrótów długich opcji ani--p_out=foo
składni, jak GNUgetopt(3)
.źródło
[]
nim są 2 myślniki? Nie ma sensu!info zsh zparseopts
szczegółyWłaśnie wymyśliłem ten skrypt
przekazać go jak,
my_script --p_out /some/path --arg_1 5
a następnie w skrypcie można użyć$arg_1
i$p_out
.źródło
v=``echo ${1} | awk '{print substr($1,3)}'`` typeset $v="$2"
(usunąć jeden backtick z każdej strony)Jeśli funkcja lub aplikacja ma więcej niż zero argumentów, zawsze ma ostatni argument.
Jeśli chcesz odczytać flagę opcji i pary wartości, jak w:
$ ./t.sh -o output -i input -l last
I chcesz zaakceptować zmienną liczbę par opcji / wartości,
I nie chcę wielkiego drzewa „jeśli… to… inaczej… fi”,
Następnie po sprawdzeniu liczby argumentów niezerowych, a nawet,
Napisz pętlę while z tymi czterema instrukcjami eval jako ciało, a następnie instrukcję case wykorzystującą dwie wartości określone w każdym przejściu przez pętlę.
Trudna część skryptu została pokazana tutaj:
źródło
właśnie wprowadziłeś parametry wiersza poleceń do zakresu skryptu !!
źródło
-a 1 -b mitsos -c karamitsos