2017-07-16 170 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

相關問題