Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:使用脚本中的外部脚本进行比较_Ruby_Comparison_Ip - Fatal编程技术网

Ruby:使用脚本中的外部脚本进行比较

Ruby:使用脚本中的外部脚本进行比较,ruby,comparison,ip,Ruby,Comparison,Ip,所以我得到了一个脚本(a),它为一个新的虚拟服务器找到了一个合适的IP地址。首先,它查看数据库,看看他选择的第一个ip是否已经被其他服务器占用。如果IP尚未使用,脚本将ping它。如果ping没有响应,那么我们进入下一步,这就是我遇到的问题 在下一步中,我必须检查IP地址是否已经在netscaler(路由器)中注册。为此,我必须在同一台机器上使用另一个脚本(B)。另一个脚本返回netscaler中定义的所有IP的列表。当我运行它时,输出如下所示 x.x.x.x x.x.x.x x.x.x.x (

所以我得到了一个脚本(a),它为一个新的虚拟服务器找到了一个合适的IP地址。首先,它查看数据库,看看他选择的第一个ip是否已经被其他服务器占用。如果IP尚未使用,脚本将ping它。如果ping没有响应,那么我们进入下一步,这就是我遇到的问题

在下一步中,我必须检查IP地址是否已经在netscaler(路由器)中注册。为此,我必须在同一台机器上使用另一个脚本(B)。另一个脚本返回netscaler中定义的所有IP的列表。当我运行它时,输出如下所示

x.x.x.x
x.x.x.x
x.x.x.x (and so on..).
我找到了许多方法来执行脚本B,但没有一种方法允许我做我想做的事情

我的目标是将我的脚本找到的ip与列出的所有ip进行比较,而不将最后的ip打印在屏幕上

所以,为了更清楚一点,让我们假设纸条a找到了IP:1.2.3.4

然后它将调用脚本B,该脚本将返回到列表中的脚本A

1.2.3.5 1.2.4.5 1.2.5.1 等等

然后A将1.2.3.4与脚本B返回的所有内容进行比较,而不在屏幕上实际显示它们


多谢各位

我会将
scriptB
业务逻辑与
scriptB
ui(CLI)逻辑分开:

将netscaler逻辑中定义的所有IP的
列表提取到单独的类/方法中:

#netscaler.rb
class Netscaler
  def self.list_ips
    # return array of ips here
  end
end

#scriptB.rb
require_relative 'netscaler'

ips = Netscaler.list_ips
puts ips # script B may show these ips on the screen
...    

#scriptA.rb
require_relative 'netscaler'

ips = Netscaler.list_ips
# script A will not show them. Instead it will operate on the returned result.
...

您可以使用backticks执行脚本B并返回输出:

ip_list = `scriptB`.split("\n")
这可以插入Alex的组织建议中。如果脚本B是您无法控制的非Ruby脚本,我会这样做


请注意,如果有任何前导或尾随空格,您可以在末尾添加一个
.map(&:strip)

非常感谢您的建议和解决方案。现在一切都很好!我以前从未在ruby中使用过类,也从未做过相关的工作。再次感谢!
ip_list = `scriptB`.split("\n")