curlコマンドの-o-オプションとは何か?意味を実例で解説|wgetの -qO-オプションの使い方

cur l command what is -o- option? Command
記事内に広告が含まれていることがあります。
[PR]

指定したURLにアクセスすることができる便利なcurlコマンドで-oオプションの後ろに-(ハイフン)がついた -o- を目にすることがある。

例えば、node.jsのバージョン管理ツールであるnvmをインストールするときのコマンドで使われている。

curl -o- の例
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

(参考)github nvm

「-o」の意味はわかるけど、「-o-」とは何でどんな処理をしているかについて。

-o-とは何か?

-o- とは、オプション「o」の後ろに「-」がついたものです。指定したURLの中身をbashとして出力します。

細かく説明すると以下のようになります。

-oとは何か?

「-o」とは、ショートオプションであることを示す「-」にオプション「o」を指定したものです。

ショートオプションとはロングオプションの省略形です。ロングオプションにはハイフン2つ「--」を使います。「-o」は「--output」と同じです。

oオプションは、ファイル名を指定してダウンロードするときに使います。

curl -o <ファイル名> <URL>


例えば、以下のようにファイル名に~/desktop/testを指定すると、指定したURLの内容がデスクトップにtestというファイル名でダウンロードされます。

curl -o ~/desktop/test https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh

▼実行結果の例

$ curl -o ~/desktop/test https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14926  100 14926    0     0  49588      0 --:--:-- --:--:-- --:--:-- 49588

#ファイルが保存されたか確認
$ ls ~/desktop | grep test
test

ファイル名にハイフン「-」を指定する

この oオプションは後ろで指定するファイル名を「-」にする(ファイル名を指定しない状態)と、指定したURLの中身をbash(黒画面上)に出力する指示になります。

$ curl -o -  https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh
#!/usr/bin/env bash

{ # this ensures the entire script is downloaded #

nvm_has() {
  type "$1" > /dev/null 2>&1
}

nvm_echo() {
  command printf %s\\n "$*" 2>/dev/null
}

###以下略

「-」の直前のスペースを省略する

ファイル名を指定しない「-」とした場合は、「-o」の後ろにスペースがあってもなくても同じ処理になります。

$ curl -o -  URL
$ curl -o-  URL

▼実行例

$ curl -o-  https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh
#!/usr/bin/env bash

{ # this ensures the entire script is downloaded #

nvm_has() {
  type "$1" > /dev/null 2>&1
}

nvm_echo() {
  command printf %s\\n "$*" 2>/dev/null
}

###以下略

まとめ

まとめると、「-o-」は–outputオプションをショートオプションで指定した形で、指定したURLの中身をbashとして出力するという意味になります。

末尾に | bash をつけることで、指定したURLの内容をbashとして実行する処理になります。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

パイプ「A | B」はAの処理結果をBの引数として渡す処理です。

つまり、https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.shからダウンロードしてきたshファイルをbashとして実行する処理になります。


wgetの -qO- とは何か?

nvmのインストールコマンドには、curlの他にwgetを使って「-qO-」オプションを指定したものもあります。

curl -qO- の例
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

(参考)github nvm

-qO-とは何か?

-q0- とは、2つのオプション「q」と「O」の後ろに「-」がついたものです。指定したURLの中身をbashとして出力しています。

細かく説明すると以下のようになります。

-qとは何か?

「-q」とは、ショートオプションであることを示す「-」にオプション「q」を指定したものです。

ショートオプションとはロングオプションの省略形です。ロングオプションにはハイフン2つ「--」を使います。「-q」は「--quit」と同じです。

qオプションは、ログファイルを出力しな指示になります。


Oとは何か?

「O」とは、ショートオプションの「O」を指しています。

「-O」は「--output-document=FILE」と同じです。指定したファイルに、URLの内容を書き込む処理になります。

wget -O <ファイル名> <URL>

小文字のoは、ログの内容をファイルに書き込むオプションとなり O とは完全に異なるので注意してください(curlとは違います)

▼実行結果の例


例えば、以下のようにファイル名に~/desktop/testを指定すると、指定したURLの内容がデスクトップにtestというファイル名でダウンロードされます。

$ wget -O ~/desktop/test https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh
--2021-07-05 14:00:30--  https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh
raw.githubusercontent.com (raw.githubusercontent.com) をDNSに問いあわせています... 185.199.110.133, 185.199.111.133, 185.199.109.133, ...
raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 14926 (15K) [text/plain]
`/Users/desktop/test' に保存中

/Users/desktop/test                             100%[==========================================================================================================================>]  14.58K  --.-KB/s 時間 0.001s

2021-07-05 14:00:30 (26.9 MB/s) - `/Users/desktop/test' へ保存完了 [14926/14926]

ここでは、DNSを問い合わせています。やどこどこに保存中、保存完了といったログが出力されていますが、「-q」オプションを付ければ、これらが何も表示されなくなります。

▼実行結果の例(qオプションをつけた場合)

$ wget -O ~/desktop/test https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh
$

ファイル名にハイフン「-」を指定する

この Oオプションは後ろで指定するファイル名を「-」にする(ファイル名を指定しない状態)と、指定したURLの中身をbash(黒画面上)に出力する指示になります。

$ wget -qO -  https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh
#!/usr/bin/env bash

{ # this ensures the entire script is downloaded #

nvm_has() {
  type "$1" > /dev/null 2>&1
}

nvm_echo() {
  command printf %s\\n "$*" 2>/dev/null
}

###以下略

「-」の直前のスペースを省略する

ファイル名を指定しない「-」とした場合は、「-o」の後ろにスペースがあってもなくても同じ処理になります。

$ wget -qO -
$ wget -qO-

▼実行例

$ wget -qO-  https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh
#!/usr/bin/env bash

{ # this ensures the entire script is downloaded #

nvm_has() {
  type "$1" > /dev/null 2>&1
}

nvm_echo() {
  command printf %s\\n "$*" 2>/dev/null
}

###以下略

まとめ

まとめると、「-qO-」は--quiteオプションと --output-document=FILE をショートオプションで指定した形で、指定したURLの中身をbashとして出力するという意味になります。

末尾に | bash をつけることで、指定したURLの内容をbashとして実行する処理になります。

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

パイプ「A | B」はAの処理結果をBの引数として渡す処理です。

つまり、https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.shからダウンロードしてきたshファイルをbashとして実行する処理になります。

タイトルとURLをコピーしました