16

Ruby Version Manager (RVM) installed like so:

bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

I understand what first < mean (feeds bash script to bash interpreter), I'm confused with <(...) part. So, what parentheses do here and the less than sign. In which cases we can use same syntax?

I tried to dig on the internet, found this SO question https://stackoverflow.com/questions/2188199/bash-double-or-single-bracket-parentheses-curly-braces and this question on ubuntuforums: http://ubuntuforums.org/showthread.php?p=7803008 But still have no idea why we use those parentheses and why we use input redirection twice.

bash < curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer

ain't the same?

Thanks.

Nemoden
  • 2,547

2 Answers2

11

It's process substitution. It feeds the output of the command into a FIFO that can be read from like a normal file.

9

It means "run the command inside the brackets, and return a filename that represents the standard output of that command here".

So, that translates to two commands:

curl ... > something
bash -s stable < something

...where "something" is the magic. (Typically, /dev/fd/... or a pipe.)