2017-07-16 3 views
0

Ich benutze eine Sinatra Web App, die eine Datei (Upload) vom Benutzer bekommt. Es überträgt dann die Datei über scp zu einem Server. Kann ich den Dateinamen aus dem params Hash holen und ihn als Umgebungsvariable einstellen und an den scp-Befehl übergeben. Unten ist ein Ausschnitt meines Codes.Umgebungsvariable in Ruby setzen und an Shell übergeben

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 Hash ist -

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

Antwort

0

die Lösung gefunden. Es stellt sich heraus, dass mir Zitate fehlten. ENV ['Datei'] = Parameter ['arne_site_file'] [: Dateiname]. Dies hat das Problem behoben. Gut zu wissen, dass env-Variablen von Ruby für andere bash-Skripte zum Zugriff gesetzt werden können.

+0

Sie sollten auch die Erweiterung im Befehl '" $ file "' angeben, um alle gültigen Dateinamen zu berücksichtigen. – chepner

+0

Eine bessere Lösung ist jedoch, etwas wie 'Kernel.spawn' zu verwenden, mit dem Sie Argumente direkt übergeben können, anstatt sich auf die Shell verlassen zu müssen, um Argumente aus ihrer Umgebung zu liefern. – chepner

Verwandte Themen