ruby выполняет удаленные скрипты в одну строку.(как установка rvm) - PullRequest
4 голосов
/ 06 июля 2011

пример установки rvm в одну строку:

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

Теперь, скажем, у меня есть сценарии ruby, как это на http://blah.com/helloworld.rb

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

Я бы хотел добиться этого в своей оболочке, не создавая временный файл в одну строку или, что еще лучше, одной командой.

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

Я пробовал это, но приглашение пользователя будет проигнорировано из-за более раннего канала.

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

Как правильно выполнить скрипт удаленного ruby? Спасибо!

Ответы [ 4 ]

6 голосов
/ 06 июля 2011

Например:

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

Ruby оценивает код ruby ​​аналогично тому, как bash оценивает код оболочки

5 голосов
/ 06 июля 2011

Еще один параметр Ruby, основанный на установке Caliber для сценариев оболочки:

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

4 голосов
/ 11 октября 2013
0 голосов
/ 07 июля 2011

В вашем коде 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...