Je souhaite créer un référentiel GitHub contenant tous les scripts pertinents que j'ai postés ici en tant que réponses.
Mais pour que cela reste finalement simple pour les utilisateurs, je voudrais leur donner une seule commande pour télécharger directement le fichier de script à partir de mon référentiel, sans avoir à installer git
d’abord sur git clone
dans l’ensemble du référentiel.
Je sais que je peux utiliser wget
pour télécharger un fichier unique, mais lorsque j'utilise le lien "Raw" d'un fichier (par exemple, https://github.com/AskUbuntu-Answers/dupe-check/ raw/master/dupe-check ), le fichier obtiendra les autorisations umask
par défaut et n’a donc pas de bit d’exécution défini. Mais je ne veux pas que l'utilisateur doive toujours lancer chmod +x
.
Les fichiers de script sont validés dans le référentiel avec les bits d’exécution corrects. Ils sont également conservés lorsque j’utilise git clone
pour obtenir le référentiel complet.
Quel est le moyen le plus simple de récupérer (et parfois d'exécuter automatiquement) un seul fichier de GitHub en conservant son autorisation d'exécution sans avoir à installer git
et à cloner l'intégralité du référentiel?
Je suggérerais que vous utilisiez des gists au lieu d'un référentiel git. Le référentiel est par nature censé être une collection de fichiers. Les Gists, d’autre part, sont des fichiers uniques. Quelque chose comme ça
wget https://Gist.githubusercontent.com/SergKolo/d77dd46e9d936b5871e1829a2afd79c3/raw/726f39be5e0a939e06ed89239d2c350451b81316/get_unity_viewports.sh \
&& chmod +x ./get_unity_viewports.sh
Mais si vous insistez pour utiliser un référentiel, au lieu d'une commande, combinez 2 en 1. Rappelez-vous que nous pouvons spécifier un interpréteur pour le code.
curl https://raw.githubusercontent.com/au-answers/dupe-check/master/dupe-check > dupe-check && python3 dupe-check
Et c'est comme ça que ça marche
$ curl https://raw.githubusercontent.com/au-answers/dupe-check/master/dupe-check\
> > dupe-check && python3 dupe-check
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 7580 100 7580 0 0 6484 0 0:00:01 0:00:01 --:--:-- 6489
Checked 1 files in total, 0 of them are duplicates by content.
Idem avec wget
$ wget https://raw.githubusercontent.com/au-answers/dupe-check/master/dupe-check && python3 dupe-check
--2016-04-24 21:17:35-- https://raw.githubusercontent.com/au-answers/dupe-check/master/dupe-check
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 23.235.44.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|23.235.44.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7580 (7.4K) [text/plain]
Saving to: ‘dupe-check.1’
100%[==================================================================================>] 7,580 --.-K/s in 0s
2016-04-24 21:17:36 (470 MB/s) - ‘dupe-check.1’ saved [7580/7580]
Checked 2 files in total, 2 of them are duplicates by content.
Here's a list of all duplicate files:
'dupe-check' (./dupe-check)
'dupe-check.1' (./dupe-check.1)
Variation sur le thème
Obtenez l'URL du fichier brut en faisant un clic droit sur le bouton raw
dans github
wget https://github.com/au-answers/dupe-check/raw/master/dupe-check
Même si Github n'expose pas cela dans le site (apparemment ils l'ont fait il y a bien longtemps ), ils fournissent des fichiers tar.gz
des référentiels.
wget -qO - https://github.com/<user>/repo>/archive/master.tar.gz | tar zx --strip-components=1 <repo>-master/<filename>
<user>
, <repo>
, <filename>
sont ce que vous attendez d'eux. --strip-components
est utilisé pour empêcher tar
de créer un répertoire nommé d'après le référentiel.
Donc:
$ wget -O - https://github.com/au-answers/dupe-check/archive/master.tar.gz | tar zx --strip-components=1 dupe-check-master/dupe-check
--2016-04-25 08:28:50-- https://github.com/au-answers/dupe-check/archive/master.tar.gz
Resolving github.com (github.com)... 192.30.252.128
Connecting to github.com (github.com)|192.30.252.128|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/au-answers/dupe-check/tar.gz/master [following]
--2016-04-25 08:28:51-- https://codeload.github.com/au-answers/dupe-check/tar.gz/master
Resolving codeload.github.com (codeload.github.com)... 192.30.252.160
Connecting to codeload.github.com (codeload.github.com)|192.30.252.160|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2470 (2.4K) [application/x-gzip]
Saving to: ‘STDOUT’
- 100%[========================================================================================================================================>] 2.41K --.-KB/s in 0s
2016-04-25 08:28:52 (21.5 MB/s) - written to stdout [2470/2470]
$ ll dupe-check
-rwxr-xr-x 1 muru muru 7.5K Mar 5 21:46 dupe-check
Je ne suis pas convaincu que ce soit une façon particulièrement amicale. Un chmod +x
supplémentaire est IMO infiniment préférable.
Vous pouvez traiter la substitution sur zsh pour extraire les zips liés sur la page de dépôt Github. Heureusement, Github ajoute des métadonnées supplémentaires aux zips afin que les autorisations soient préservées. unzip
sur Ubuntu est capable de l'utiliser pour restaurer les autorisations. Alors:
unzip -j =(wget -O - https://github.com/au-answers/dupe-check/archive/master.Zip) dupe-check-master/dupe-check
Malheureusement, =()
est une chose zsh. Il crée un fichier approprié au lieu d’une FIFO. Bash n'a pas d'équivalent. <()
est toujours FIFO.
Vous pouvez obtenir n seul fichier du repo en utilisant git
. Cependant, Github ne supporte pas cela .