Как передать аргумент скрипту, который вводится в bash


10

Прямо сейчас у меня есть одна строка, как это:

curl -fsSL http://git.io/vvZMn | bash

Он загружает скрипт и передает его в bash как файл stdin. Я хотел бы запустить этот скрипт с дополнительным аргументом print.

Может как то так?

curl -fsSL http://git.io/vvZMn | bash -- print

Но это не работает.


4
Что вы ожидаете printздесь сделать? Показать команды, которые выполняются? Если так, попробуйте bash -x. Примечание: эта curl | bashпроцедура - огромная дыра в безопасности; вы не увидите, что будет запущено до тех пор, пока ваш сервер не будет запущен.
Стивен Харрис

Ответы:


16

Я считаю, что вы ищете -sвариант. С помощью -sвы можете передать аргументы скрипту.

В качестве фиктивного примера, чтобы проиллюстрировать это:

$ echo 'echo 1=$1' | bash -s -- Print
1=Print

Здесь вы можете видеть, что сценарию, предоставленному в stdin, присвоен позиционный параметр Print. Ваш скрипт принимает -u UUIDаргумент, который также может быть учтен:

$ echo 'echo arguments=$*' | bash -s -- -u UUID print
arguments=-u UUID print

Итак, в вашем случае:

curl -fsSL http://git.io/vvZMn | bash -s -- print

Или,

curl -fsSL http://git.io/vvZMn | bash -s -- -u UUID print

Как отметил Стивен Харрис, загрузка скрипта и его выполнение, незаметное зрение, является проблемой безопасности.


3

Если ваша система имеет /dev/stdin, вы можете использовать

$ echo 'echo 1=$1' | bash /dev/stdin print
1=print

Вы не делать этого:

$ echo 'echo 1=$1' | bash /dev/stdin -- print
1=--

Если вы хотите использовать --, сделайте это:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.