Ruby One liner |测试远程主机端口

Ruby One liner |测试远程主机端口,ruby,sockets,Ruby,Sockets,我正在尝试Ruby中的Perl命令 Perl perl -MIO::Socket::INET -e 'until(new IO::Socket::INET("localhost:80")) { print "Waiting for network..\n"; sleep 1}' 我如何在ruby中实现同样的功能 我试过: require 'socket' until !( TCPSocket.new("localhost",80).close ) do puts "Wait..

我正在尝试Ruby中的Perl命令

Perl

perl -MIO::Socket::INET -e 'until(new IO::Socket::INET("localhost:80")) { print "Waiting for network..\n"; sleep 1}'
我如何在ruby中实现同样的功能

我试过:

require 'socket'
until !( TCPSocket.new("localhost",80).close ) do
        puts "Wait..."
        sleep 1
end

我在找一个红宝石衬里

主要区别在于,如果Ruby无法建立IO,它将引发一个错误,因此您需要挽救错误条件。它在一定程度上改变了流程,但仍然非常可行:

loop { break if (TCPSocket.open("localhost",80) rescue nil); puts "Wait...."; sleep 1 }

从另一个答案可以看出,可以从Perl版本进行更字面的转换。只需使用Ruby表达式
(TCPSocket.open(“localhost”,80)rescue nil)
来替换Perl的
新IO::Socket::INET(“localhost:80”)
,这样Ruby的引发错误行为在无法创建对象时与Perl的return undef更匹配。

这类似:

require 'socket'
(puts "Waiting..."; sleep 1) until (TCPSocket.open("localhost",3000) rescue nil)
完整命令行:

ruby -r socket -e '(puts "Waiting..."; sleep 1) until (TCPSocket.open("localhost",3000) rescue nil)'

谢谢它工作得很好。。请给我推荐学习Ruby的链接。像你一样D@Rahul帕蒂尔:我从中学到了,如果你已经知道如何用另一种语言编写代码,我认为这是一个很好的参考。每个人的学习方式都不一样,所以很难做出一般性的推荐。谢谢你的回复。。我将从那本书开始练习:D