2016-06-08 2 views
2

Ich habe eine Harke Aufgabe in meinem Kalebasse Projekt, das Befehl mehr Systeme führt, wie:Gibt es eine bessere Möglichkeit, mehrere Systembefehle aus einer Rake-Task auszuführen?

desc 'Export and execute features from JIRA ' 
    task :run_jira, [:key, :language, :apk_file] do |_, args| 
    key = args[:key] 
    language = args[:language] || 'en' 
    apk_file = args[:apk_file] || default_apk 
    system "curl -u admin:admin -X GET http://myjira/rest/raven/1.0/export/test?keys=#{key} > jira.zip" 
    system "unzip -o jira.zip -d features/jira" 
    system "rm -rf jira.zip" 
    system "calabash-android run #{apk_file} -p android -p #{language} -p common -f json -o results/reports/calabash-#{key}.json features/jira" 
    system "curl -H 'Content-Type: application/json' -X POST -u admin:admin --data @results/reports/calabash-#{key}.json http://myjira/rest/raven/1.0/import/execution/cucumber" 
end 

Gibt es einen besseren Weg, um die 5-Systemaufrufe ausführen? Meine Idee ist es, ein .sh-Skript zu erstellen und es von der Aufgabe aus zu starten, aber da das Skript sowohl auf OS X- als auch auf Linux-Rechnern ausgeführt wird, könnte es mehr Probleme verursachen.

Antwort

1

Sie könnten alle diese Befehle in einem einzigen Befehl verbinden und das ausführen. Vorausgesetzt, dass Sie ein Array erstellt commands enthält alle Befehle, können Sie dies tun:

composite_command = commands.join('; ') 
system(composite_command) 

Wenn Sie die Ausführung stoppen soll, wenn Fehler enthalten Sie die Semikolons mit Doppel Et-Zeichen Et-Zeichen ersetzen könnte:

composite_command = commands.join(' && ') 
system(composite_command) 

Dies veranschaulicht, was && tut:

$ ls foo && echo hi 
ls: foo: No such file or directory 
$ touch foo 
$ ls foo && echo hi 
foo 
hi 

die Schale definiert als Versagen der Rücksendung eines Austrittscode ungleich 0.

Es ist eine maximale Länge Befehl, aber ich erwarte, dass es immer mindestens 1024.

+1

P. S. wäre Wenn Sie seltsame Probleme bekommen, müssen Sie vielleicht einige Teile Ihrer Befehle in doppelte Anführungszeichen setzen - das Verwenden von '% q {}' zum Erstellen einer Zeichenkette erleichtert dies; und/oder Sie finden möglicherweise, dass Sie 'Shellwords.shellescape' für die Befehle verwenden müssen. –

Verwandte Themen