Disons que j’ai le fichier my_cool_file.sh
suivant dans un référentiel Git dans Github (ou BitBucket pour cette question) nommé my_cool_repo
. Le fichier est un script utilisé pour installer le logiciel bien connu CSF-LFD de ConfigServer:
#!/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
Comment exécuter ce script Bash (un fichier .sh
) directement à partir de Github, via une ligne de commande?
Chargez le fichier (assurez-vous d'utiliser le fichier brut, sinon vous chargez la page HTML!) Avec wget
en utilisant son URL exacte, puis dirigez la sortie vers bash
:
Voici un exemple avec des clarifications:
wget -O - https://raw.githubusercontent.com/<username>/<project>/<branch>/<path>/<file> | bash
À partir de la page de manuel de la commande 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.
Ainsi, le fait de générer -
écrira le contenu des fichiers dans STDOUT, puis vous le dirigerez simplement vers bash
ou selon le shell que vous préférez. Si votre script a besoin des droits Sudo
, vous devez utiliser Sudo bash
à la fin pour que la ligne devienne:
wget -O - https://raw.githubusercontent.com/<username>/<project>/<branch>/<path>/<file> | Sudo bash