2011-07-06 104 views
4

安裝在一個行示例RVM:ruby​​在一行中執行遠程腳本。 (如安裝RVM)

user$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm) 

現在,說我在http://blah.com/helloworld.rb

puts "what's ur name?" 
name = gets.chomp 
puts "hello world from web, #{name}" 

有一個Ruby腳本這樣我想實現這一點,在我的殼而無需在一行中創建臨時文件,甚至不需要創建一個命令。

wget http://blah.com/helloworld.rb; ruby helloworld.rb; rm helloworld.rb 

我試過這個,但用戶提示會因爲先前的管道而被忽略。

curl -s http://blah.com/helloworld.rb | ruby 

執行遠程ruby腳本的正確方法是什麼?謝謝!

回答

6

像這樣:

ruby < <(curl -s http://blah.com/helloworld.rb) 

紅寶石類似的評估Ruby代碼來砸如何評估shell代碼

+0

第一個'<'是不必要的。 – cam

+0

這似乎並沒有在這裏工作。 – c2h2

+0

嘗試添加一個<(代碼更新) –

5

基於口徑另一個Ruby選項安裝shell腳本:

ruby -e "require 'open-uri'; system open('http:// or local file').read" 

同爲Ruby腳本:

ruby -e "require 'open-uri'; eval open('http:// or local file').read" 

編輯:固定失蹤報價,並添加Ruby腳本執行

+0

我不認爲這個工程。 – c2h2

+0

你是對的,我忘了一個報價,並改變它與ruby腳本一起工作。我要編輯它來修復它。謝謝 – rgo

0

在Ruby代碼,你必須重新打開標準輸入,並將其綁到控制終端設備/dev/tty

rubyscript="$(cat <<-'EOF' 
puts "what's ur name?" 
name = gets.chomp 
puts "hello world from web, #{name}" 
EOF 
)" 

ruby <(echo '$stdin.reopen(File.open("/dev/tty", "r"))'; echo "$rubyscript")