2017-07-16 94 views
0

我正在运行一个用于从用户获取文件(上载)的sinatra web应用程序。然后它通过scp将文件传输到服务器。我可以从params Hash中获取文件名,并将其设置为环境变量并将其传递给scp命令。以下是我的代码片段。在ruby中设置环境变量并将其传递给shell

ENV[file] = params['arne_site_file'][:filename] 
transfer = `scp -i /opt/zabbix-proxy/etc/.ssh/id_rsa $file [email protected]:/home/zabbix/ARNE_5216_files` 

PARAMS散列是 -

{ 
"arne_site_file" => { 
    :filename => "ARNE_SITE__BB5216_L16B_936441_HWY_54_A.xml" 
}, 
     "submit" => "Validate File" 
} 

回答

0

找到了解决办法。原来我错过了引号。 ENV ['file'] = params ['arne_site_file'] [:filename]。这解决了这个问题。很高兴知道env变量可以由Ruby设置为其他bash脚本访问。

+0

您还应该在命令'“$ file”'中引用扩展,以允许所有有效的文件名。 – chepner

+0

不过,一个更好的解决方案是使用类似'Kernel.spawn'的东西,它可以让你直接传递参数,而不是依赖shell从它的环境中提供参数。 – chepner

相关问题