Вам всегда нужно будет загружать файл (т.е. извлекать его с сервера), но вы можете создать линию для извлечения и выполнения в одном. Самым простым будет:
curl ${url} | bash
Вам нужно будет найти URL, который представляет необработанный файл (а не веб-страницу HTML). Для BitBucket это будет выглядеть примерно так: Вместо этого вы можете заменить ${commit_id}
на имя ветви или тега.
https://bitbucket.org/${user}/${repo}/raw/${commit_id}/${file}
Однако остерегайтесь того, что это часто вызывает удивление с точки зрения безопасности, особенно при извлечении файла через HTTP (скорее чем HTTPS), так как вы в основном запускаете неизвестный код на вашем компьютере. Использование sudo
в этом конвейере еще более актуально.
Пользователь должен быть готов доверять всему, что хранится в хранилище, поэтому убедитесь, что вы разрешаете только доверенным пользователям pu sh (или объединяете ), и убедитесь, что вы внимательно просматриваете изменения в рассматриваемом файле.
Вы также должны знать, что при запуске такого скрипта (в равной степени для bash ${file}
или bash < ${file}
) shebang не будет соблюдаться - он будет рассматриваться как комментарий и игнорируется.
Если, например, ваш скрипт начинается так, как показано ниже (-e
для выхода из ошибки и -u
для обработки неопределенных переменных как ошибки), тогда эти флаги не будут установлены.
#!/bin/bash -eu
# ... body of script ...
Когда " выполняет " файл напрямую (т.е.: chmod +x ./my_script.sh
, ./my_script.sh
) ядро обрабатывает shebang и вызывает /bin/bash -eu
... но при выполнении сценария с помощью одного из вышеперечисленных методов вызов bash
находится в конвейере.
Вместо этого предпочтительно установить эти флаги в теле вашего скрипта, чтобы метод исполнения не имеет значения:
#!/bin/bash
set -eu
# ... body of script ...