我正在尝试制作一个ruby脚本来附加AWS EC2中的EBS卷。我错过了一些细微的细节因为我在附加音量时出错了。请参阅以下错误:
#!/usr/bin/env ruby
require 'rubygems'
cmd = "ec2-create-volume --size 10 --region us-east-1 --availability-zone us-east-1a --type gp2"
system(cmd, :out => ['/tmp/volid', 'w'])
volid = `awk '{print $2}' /tmp/volid`
puts "#{volid}" -----> PUTS THE VARIABLE AS EXPECTED
cmd = "ec2-attach-volume #{volid} --instance i-2e69a1b5 --device /dev/xvdg"
system(cmd) ----> It shows ERROR -i instance/--instance is missing, somehow is putting the variable incorectly, it's like is not reading the command after the volid variable.
如果我声明voldid ='vol-123'脚本正在运行,但是如果我把它放在文件中就不起作用了,即使输出它显示vol-123。
答案 0 :(得分:1)
猜测文件末尾有一个行尾字符,您正在读取卷ID。 strip
函数删除了前导和尾随空格,这应该清除它。
似乎也更容易做到
volid = File.read("/tmp/volid").strip
而不是炮轰awk。您还可以通过使用允许捕获命令输出的各种方法(反引号,popen,open3等)来完全避免使用临时文件。 aws红宝石sdk也很容易使用,虽然这显然是一个不同的鱼。