Скажите, что у меня есть следующий файл my_cool_file.sh
в репозитории Git в Github (или BitBucket в этом отношении) с именем my_cool_repo
. Файл представляет собой сценарий, используемый для установки хорошо известного программного обеспечения ConfigServer CSF-LFD:
#!/bin/bash
cd /usr/src
rm -fv csf.tgz
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh
sed -i "s/TESTING = "1"/TESTING = "0"/g" /etc/csf/csf.conf
csf -r
perl /usr/local/csf/bin/csftest.pl
# sh /etc/csf/uninstall.sh
Как можно выполнить этот сценарий Bash (файл .sh
) непосредственно из Github через командную строку?
Загрузите файл (убедитесь, что вы используете необработанный файл, в противном случае вы загрузите страницу HTML!) С wget
, используя его точный URL, а затем перенаправите вывод в bash
:
Вот пример с пояснениями:
wget -O - https://raw.githubusercontent.com/<username>/<project>/<branch>/<path>/<file> | bash
Из справочной страницы для команды wget
:
-O file --output-document=file The documents will not be written to the appropriate files, but all will be concatenated together and written to file. If - is used as file, documents will be printed to standard output, disabling link conversion. (Use ./- to print to a file literally named -.) Use of -O is not intended to mean simply "use the name file instead of the one in the URL;" rather, it is analogous to shell redirection: wget -O file http://foo is intended to work like wget -O - http://foo > file; file will be truncated immediately, and all downloaded content will be written there.
Таким образом, вывод на -
будет на самом деле записываете содержимое файлов в STDOUT, а затем вы просто перенаправляете его в bash
или в любую оболочку, которую предпочитаете. Если вашему скрипту нужны права sudo
, вам нужно сделать sudo bash
в конце, чтобы строка выглядела следующим образом:
wget -O - https://raw.githubusercontent.com/<username>/<project>/<branch>/<path>/<file> | sudo bash
Если в вашем скрипте есть такие записи, как read user_input
, попробуйте следующее:
bash <(curl -s https://raw.githubusercontent.com/username/project/branch/path /file.sh)
Параметр -s
не показывает прогресс загрузки.
Вы можете использовать следующую команду для передачи параметров
bash -s
Нашел здесь: передача параметров в bash при выполнении сценария, полученного curl