web-dev-qa-db-ja.com

+ xアクセス許可を保持したGitHubから実行可能スクリプトをダウンロードする

ここに回答として投稿したすべての関連スクリプトのGitHubリポジトリを作成したいと思います。

しかし、ユーザーが最終的にシンプルにするために、リポジトリ全体からgitを最初にgit cloneをインストールすることなく、リポジトリからスクリプトファイルを直接ダウンロードする単一のコマンドを提供したいと思います。

wgetを使用して1つのファイルをダウンロードできることは知っていますが、ファイルの「Raw」リンクを使用すると(例 https://github.com/AskUbuntu-Answers/dupe-check/ raw/master/dupe-check )、ファイルはデフォルトのumaskパーミッションを取得するため、実行ビットは設定されません。しかし、ユーザーがchmod +xを実行する必要があるのは望ましくありません。

スクリプトファイルは、正しい実行ビットでリポジトリにプッシュされてコミットされます。git cloneを使用してリポジトリ全体を取得するときにも保持されます。

gitをインストールしてリポジトリ全体を複製することなく、GitHubから単一のファイルを取得して(場合によっては自動的に実行して)実行権限を保持する最も簡単な方法は何ですか?

1
Byte Commander

Gitリポジトリの代わりにgistsを使用することをお勧めします。本来、リポジトリはファイルのコレクションであると想定されています。一方、要点は単一のファイルです。このようなもの

wget https://Gist.githubusercontent.com/SergKolo/d77dd46e9d936b5871e1829a2afd79c3/raw/726f39be5e0a939e06ed89239d2c350451b81316/get_unity_viewports.sh \
&& chmod +x ./get_unity_viewports.sh

ただし、1コマンドではなくリポジトリを使用する場合は、2を1に結合します。コードのインタープリターを指定できることに注意してください。

curl https://raw.githubusercontent.com/au-answers/dupe-check/master/dupe-check  > dupe-check && python3 dupe-check

そして、それはそれが実行される方法です

$ 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.

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)

テーマのバリエーション

Githubのrawボタンを右クリックして、未加工ファイルのURLを取得します

wget https://github.com/au-answers/dupe-check/raw/master/dupe-check
2

Tarballを入手してください!

Githubはこれをサイトで公開していませんが(明らかに 以前はそうでした )、リポジトリのtar.gzファイルを提供します。

wget -qO - https://github.com/<user>/repo>/archive/master.tar.gz | tar zx --strip-components=1 <repo>-master/<filename>

<user><repo><filename>は、あなたが期待するものです。 --strip-componentsは、tarがレポにちなんで名付けられたディレクトリを作成するのを防ぐために使用されます。

したがって:

$ 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

これは特に友好的な方法だとは思いません。追加のchmod +xは、無限にIMOが望ましいです。

失敗した試行

Zipを入手してください!

Zshで置換を処理して、Githubリポジトリページにリンクされたzipを抽出できます。ありがたいことに、Githubは追加のメタデータをzipに追加して、アクセス許可が保持されるようにします。 Ubuntuのunzipは、これを使用して権限を復元できます。そう:

unzip -j =(wget -O - https://github.com/au-answers/dupe-check/archive/master.Zip) dupe-check-master/dupe-check

残念ながら、=()はzshのものです。 FIFOの代わりに適切なファイルを作成します。 Bashには同等のものはありません。 <()は常にFIFOです。

Git単一ファイル

gitを使用して リポジトリからの単一ファイル を取得できます。ただし、 Githubはこれをサポートしていません

2
muru