Передача различного набора аргументов различным командам в скрипте bash linux

280
Ali

Я пишу bash-скрипт, foo.shкоторый запускает слишком команды barс первым входным аргументом и bazвторым аргументом:

#! /bin/bash bar "$1" baz "$2" 

Теперь я хочу сделать foo.shболее гибким, имея необязательное количество аргументов для barи baz, что-то вроде ниже:

./foo.sh bar_args="-x -v message=hello" baz_args="-d -m" 

И я хочу foo.shпередать в bar_argsкачестве входных аргументов bar, и baz_argsв baz. Я также хочу foo.shработать нормально, если ни один из аргументов не был дан (например, если bar_argsне предоставлен, barдолжен быть вызван без каких-либо аргументов).

Как это сделать?

0
Я бы рекомендовал изучить решение, такое как getopt (s), как описано в [этом подробном ответе] (http://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash) , Getopt (s) в C обладает способностью делать именно то, что вы хотите, поэтому я предполагаю, что вы должны быть в состоянии воспроизвести это поведение в Bash. К сожалению, у меня есть только время, чтобы предложить вам указатель, и я не могу рассказать вам подробности реализации (как бы мне этого ни хотелось!) afeique 9 лет назад 0
Спасибо, я ищу решение сценария bash как бы то ни было. Ali 9 лет назад 0

1 ответ на вопрос

1
glenn jackman

You can do this, but it's a bit fragile

foo.sh will look like this

#! /bin/bash declare "$@" # evaluate the params as variable declarations bar $bar_args # not quoted! baz $baz_args # not quoted! 

Then, ./foo.sh bar_args="-x -v message=hello" baz_args="-d -m" will work like you hope.

Do not attempt to pass a message with whitespace in it, can't be done in this manner.

Похожие вопросы