2013-04-24 127 views
0

我写了一个输出用户选择的URL的小Ruby脚本。我想将此URL嵌入到我的Bash脚本中,以便它直接提供给wget部分,而不是强制用户复制和粘贴链接。目前的代码如下:将Ruby脚本结果回传到Bash脚本变量中

>echo "Choose file to download" 
>./myscript.rb # 
>echo "Copy and Paste URL" 
>read answer 
>wget -O /myfile.zip "$answer" 

任何帮助,使这将不胜感激。

编辑:

>"Choose file to download" 
>18 obfuscated1.zip 891 Thu, 18 Apr 2013 16:13:05 GMT 
>19 obfuscated2.zip 892 Fri, 19 Apr 2013 16:13:53 GMT 
>20 obfuscated3.zip 893 Sat, 20 Apr 2013 16:13:16 GMT 
>20 
>http://s3-us.amazonaws.com/obfuscated3.zip/AWSAccessKeyId=/Expires=/Signature= 

URL标记化产出和这里简称为明显的原因。

回答

2

你可以使用命令替换做到这一点:

answer=$(./myscript.rb) 
wget -O /myfile.zip "$answer" 

更新:

我还没有考虑过你的脚本,会输出比你感兴趣的URL

鉴于你至少可以:

  1. 修改myscript.rb以发出标准输出上的URL和其他标准错误上的消息。那么你应该可以使用上面的解决方案。

  2. 运行wgetmyscript.rb使用system Ruby的方法是这样的:

    # the url variable holds the URL chosen by the user 
    system("wget -O /myfile.zip #{url}") 
    
+0

谢谢你的快速反应。使用该命令将脚本冻结在“answer = $(./ myscript.rb)”处。我认为是因为用户在Ruby脚本内部提供了一个答案,该脚本产生了适当的URL。有没有一种方法可以将URL结果回显到变量中,或者您认为最好查找Ruby解决方案吗? – LFoos24 2013-04-24 15:56:57

+0

它不应该冻结。尝试用这个超级简单的Ruby脚本'puts(gets.chomp)'替换你的'myscript.rb'。它冻结? – toro2k 2013-04-24 16:09:30

+2

它没有冻结; 'myscript.rb'可能会提示用户输入内容,但不会显示提示符,因为它是由'$(...)'语法捕获的。 – chepner 2013-04-24 16:12:09