ausführen ich wie folgt, wenn die Zeichenfolge gedruckt wirdRuby eine mehrzeilige cmd String
curl --tlsv1.2 -b /tmp/cookie.txt -c /tmp/cookie.txt --connect-timeout 60 -X POST
-H 'Content-Type: application/xml'
-H 'Accept: application/xml'
-d '<?xml version="1.0" encoding="UTF-8" ?>
<ns:login xmlns:ns="http://www.actility.com/smp/ws/admin">
<login>hello</login><password>wPa4GwYbRTCw0Uy!</password></ns:login>'
--location https://myapi.application.com
Wie führe ich es in Ruby w/o Modifizieren
cmd = %Q(curl --tlsv1.2 -b #{config['cookies']} -C#{config['cookies']} --
connect-timeout 60 -X POST
-H 'Content-Type: application/xml'
-H 'Accept: application/xml'
-d '#{xml_content}'
--location #{uri})
puts cmd
Der Ausgang ist ein curl Befehl bauen hatte die cmd string zu einem einzigen cmd?
ich diesen Fehler bekam 'curl: keine URL angegeben! curl: try 'curl --help' oder 'curl --manual' für weitere Informationen sh: 2: -H: nicht gefunden sh: 3: -H: nicht gefunden sh: 4: -d: nicht gefunden sh: 7: --Ort: nicht gefunden' –
Ich sehe das Problem. Ein Zeilenumbruch in einem String, der an '% x()' übergeben wird, ist genauso wie das Drücken von im Terminal. Um das Senden des Befehls zu verhindern, müssen Sie das Zeilenumbruchzeichen umgehen, indem Sie ein "\" voranstellen (wie von anquegi vorgeschlagen), oder Sie entfernen einfach die Zeilenumbrüche für die Ausführung. '% x (# {cmd.tr (" \ n ", '')})'. –