/ / Предаване на аргументи на скрипт, прикачен с bash -c - linux, bash, shell, unix, sh

Предаване на аргументи на скрипт, прикачен с bash -c - linux, bash, shell, unix, sh

Аз тествам един баш скрипт, на който създадох GitHub за поведенческа коректност (например, че той прави правилно разглеждане на опциите). Искам да направя това, без да се налага да клонирам локално хранилището, така че ето как го правя:

curl -sSL https://github.com/jamesqo/gid/raw/master/gid | xargs -0 bash -c

Моят въпрос е как мога да предам аргументи на въпросния скрипт? опитах bash -c --help, но това не работи, тъй като се интерпретира като част от сценария.

Благодаря!

Отговори:

2 за отговор № 1

Вие всъщност усложнявате нещата с помощта xargs с Баш -c опция.

Изтеглете директно скрипта

Не е нужно да клонирате хранилището, за да стартирате скрипта. Просто го изтеглете директно:

curl -o gid https://raw.githubusercontent.com/jamesqo/gid/master/gid

Сега, когато се изтегли като gid, можете да го изпълните като скрипт Bash, например,

bash gid --help

Можете също да направите изтегления скрипт изпълним, за да го стартирате като обикновен Unix скрипт файл (използвайки неговия shebang, #!/bin/bash):

chmod +x gid
./gid --help

Използвайте заместване на процеса

Ако искате да стартирате скрипта, без всъщност да я запазите във файл, можете да използвате замяната на Bash процес:

bash <(curl -sSL https://github.com/jamesqo/gid/raw/master/gid) --help

2 за отговор № 2

Аз ще отговоря на коментарите на Антъни - има много по-смисъл да изтеглите скрипта и да го изпълнявате директно, но ако наистина сте готови да използвате -c опция за bash, това е малко сложно, проблемът е, че когато го направите:

something | xargs -0 bash -c

няма никаква възможност да предадат някакви аргументи. Всички те се поглъщат като аргумент -c - по същество се превръща в:

bash -c "$(something)"

така че ако поставите нещо след -c в харг, той получава преди нещо. Няма възможност да поставиш нищо след нещо, тъй като те не ви оставят.

Ако искате да предадете аргументи, трябва да използвате опцията за позиция за заместване за xargs, която ви позволява да поставите къде се намира аргументът, опцията е -J <item>, а следващото нещо, което трябва да осъзнаем, е, че първият аргумент ще бъде $0, така че трябва да направите:

something | xargs -0 -I @ bash -c @ something <arg1> <arg2>…

Мога да се съревновавам с това:

echo "echo hi: ~$0~ ~$1~ ~$2~ ~$3~" | xargs -0 -I @ bash -c @ something one two three four

който добива:

hi: ~something~ ~one~ ~two~ ~three~