Як передавати аргумент скрипту, який вводиться в 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.