2012-01-24 12 views
4

可能性の重複:
What does it mean “bash < <(curl rvm.io/releases/rvm-install-head)”bash <<(curl -s https://rvm.io/install/rvm):それは何ですか?

私は、Mac OS XのライオンではRuby on Railsをインストールする作業と、このライン上呼ばれる、いくつかのチュートリアルに出くわしたんだ:

bash < <(curl -s https://rvm.io/install/rvm) 

bash < <ビットが何であるか分かりません。

この行は何をしますか?

おかげ

答えて

6

最初の<は、右側のファイルを左側のコマンドのstdinにリダイレクトします。

<(...)構文は指定されたコマンドを実行し、名前付きパイプ(ディスクに保存せずに書き込まれたものを出力する特別な種類のファイル)に出力を保存し、<(...)全体をファイル名に置き換えます。これはプロセス置換と呼ばれ(man bashで調べることができます)、ファイルが必要になるがコマンドの出力を代わりに使用したい場合は常に使用されます。

curlは、与えられたURLを引数としてダウンロードして画面(stdout)に出力するコマンドです。要約で

、あなたが与えたコマンドが行うことは次のとおりです。

  1. ランはbash、入力として、一時的な名前付きパイプの内容をそれを与えます。
  2. bashスクリプトであるURL https://rvm.io/install/rvmをダウンロードし、bashへの入力として与えられた一時的な名前付きパイプに保存します。

これは、bashを使用してURLでスクリプトを効果的に実行します。

3

<(command)構文は、プロセス置換を実行するために使用されます。ここでそれについてもっと読む:http://tldp.org/LDP/abs/html/process-sub.html

これは、1つのコマンドの出力をファイルの引数として別のコマンドに送る場合に非常に便利です。 <(command)の構文は、あたかもそれがファイルであるかのように出力を動作させます。

たとえば、perlには引数としてperlプログラムが必要であることがわかっています。

ここで、perlプログラムがhttp://pastebin.com/raw.php?i=wdtZYvvrというURLにある場合、そのURLにはcurl http://pastebin.com/raw.php?i=wdtZYvvrの出力があることがわかります。そこで、我々は次のようにperlへの引数として、このコマンドの出力を供給することができます:私は2つのコマンドではなく、二つのファイルからの出力の差分を取りたいとき

perl <(curl http://pastebin.com/raw.php?i=wdtZYvvr) 

は、私は多くの場合、プロセス置換が非常に便利。しかし、diffには2つのファイル引数が必要です。そこで、2つの出力を、プロセス置換を使ってdiffするファイルとして提供します。

0

ビットは基本的にはコマンドラインの指示としてcurlコマンドの出力を解釈するための命令であり、カールは基本的にウェブページを参照しているだけです。 https://rvm.io/install/rvmを開くと、bashに実行指示のあるスクリプトが表示されます。

0

bashを含む多くのシェルでは、<を使用して入力をリダイレクトします。 foo < <(bar)はfooがbarの出力を入力として読み込むことを意味します。

関連する問題