Homebrewのインストールコマンドがよくわからない→ちょっとわかった!

macでHomebrewをインストールするには、公式ページに載ってるとおり

$ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

ってターミナルで実行する。

せっかくだしこのコマンドの意味を調べた。

ruby
 rubyってこと
eオプション
 その後ろに書かれたスクリプトを実行するというもの
$
 よくわからないけどターミナルで実行するものを表すときに書く記号だしきっとその意味だと思う
curl -fsSL https://raw.github.com/mxcl/homebrew/go
 curlというコマンドはファイルの送受信を行うためのものらしい
 -fsSLっていうのはしらべても全然情報がでてこなくて(Homebrewをインストールするまさにこのコマンドしかみつからなかった)不明
 たぶんSSL接続するよとかそういうことじゃないかと予想
 うしろがhttpsだし

つまり、要はとにかくhttps://raw.github.com/mxcl/homebrew/goっていうところからデータを受信するんだと思う。
でも、もしこの認識があっているとするとruby -eを通さなくてもターミナルにそのまま
curl -fsSL https://raw.github.com/mxcl/homebrew/go
って書けばいいのではと思うものの、わからないしそんなわけないし試してない。

  • 20:34追記

コメント読んでめっちゃわかった!

githubのurl先を見るとわかるけど、rubyのコードになっているのでこれをcurlを使ってダウンロードしてきてそれをrubyで実行しているんじゃないかという認識です(僕は)

fはfailの略でエラー処理をするオプションで、sはsilent、Sはshow error、Lはlocationなんだそうです
参考: http://www.hcn.zaq.ne.jp/___/unix/curl_manpage.html

e-jigsaw

受信するとこまでは合っていたけど、そうやって受信したものをruby -eで実行したかったんだ。
たしかにそうだ。もう少しだったー!
あと、-fsSLって書かれたときに、自分は"fsSL"っていうオプションなんだと思い込んでいたのでそうやって調べていたわけだけど、こういう書き方をしたときそれはfとsとSとLというオプションをまとめて指定する書き方なんだそうだ。
これは知らなかったので今後こうやってコマンドの意味調べることがあってもかなり自力でたどり着ける率上がった気がする。
というわけで各オプションの内容を自分でもまとめてみる。

f

サーバエラーが生じたときに黙って(何も出力しないまま)終わらせます。

http://www.hcn.zaq.ne.jp/___/unix/curl_manpage.html

このオプションを書くことで、サーバエラーがruby -eに読まれてしまうのを防ぎたいのだとおもう。たぶん。

s

沈黙モードにします。 プログレスメータやエラーメッセージは表示されません。 curl の出力を止めます。

http://www.hcn.zaq.ne.jp/___/unix/curl_manpage.html

これも、これを入れることでcurl自身の出力がruby -eに読まれるのを防ぎたいのだと思う。

S

  • s, --silent と伴用すると、失敗時にはエラーメッセージが表示されるようになります。
http://www.hcn.zaq.ne.jp/___/unix/curl_manpage.html

アイエエエ!?エラーメッセージ表示ナンデ!?ruby -e食べちゃう!?
fと言ってることが違うからこまるけど、「表示」と「出力」がちがう意味で、
「表示」はターミナルに表示されるだけで「出力」されないという意味ならばわかるかも。

L

要求したページが別の場所に移動していた場合に(サーバからの Location: ヘッダ行と 3XX 応答コードで検知されます)、このオプションにより,新しい場所に対して要求を再試行するようになります。

http://www.hcn.zaq.ne.jp/___/unix/curl_manpage.html

サーバーに、移動したページを登録しておくことができるということから既に初耳。
これでもしインストールのためのコードが https://raw.github.com/mxcl/homebrew/go から移動してしまっていても追跡してくれるわけだな。

というわけで全体的になんとなくわかった。おおよそすっきり。id:e-jigsaw、ありがとうございます!!