Frage

Ich versuche, ein einfaches Automator Tröpfchen zu erzeugen, die die style.less Datei fiel gelassen hinein nehmen und den folgenden Befehl less darauf ausgeführt werden:

$ LESSC {DROPPED_FILE} --watch

, die überwacht die Datei, die ich fallen gelassen haben für alle Änderungen und wird dann automatisch das ausgegebene style.css aktualisieren

Zur Info: Ich bin mit weniger dynamisch geschrieben CSS-Dateien. Weitere Informationen hier .

Die Grundtröpfchen funktioniert super.

  1. Die abgelegte Datei in eine Variable übergeben wird; Zu diesem Zweck:. {MY_VAR}
  2. Ich laufe wie ein Shell-Skript in der /usr/bin/ruby Shell folgt system("lessc {MY_VAR} --watch &")

das funktioniert toll, aber ich will die --watch auf dem Austritt aus der Automator App gestoppt werden.

Die LESS-Dokumentation sagt der STRG + C drücken Verknüpfung während in der Befehlszeilen-Shell das Skript abzubrechen.

Aber da ich bin nicht in den Terminal-Fenstern (Befehl im Hintergrund übergeben wird) Ich weiß nicht, wie das Skript zu beenden.

Auch nach dem automator.app geschlossen wurde die style.less Datei noch für Änderungen beobachtet wird und der entsprechend erzeugten style.css noch neu geschrieben wird.

Also im Grunde muß ich beim Verlassen der .app den Abbruchbefehl zu übergeben.

Ich habe eine einfache Pop-up erzeugt, dass auf Klick wird die App nach vorbei einem anderen Befehl an den Terminal-Shell schließen.

Dies ist der Teil, wo alle meine Versuche waren erfolglos um das Skript zu beenden.

Gibt es eine Kommandozeilen-Funktion, die die gleiche wie das Drücken der STRG-C-Befehl fungiert? Wie würde ich passiere dies die beste an die Schale?

War es hilfreich?

Lösung

Wenn Sie CTRL-C in der Konsole drücken, wird dies nicht über STDIN zu Ihrem Programm senden. Bash (oder was auch immer Sie verwenden) behandelt CTRL-C Sonder. Die bash sendet ein Signal an den Prozess. Im Fall von CTRL-C ist diese SIGINT. Um ein Signal zu einem Programm, das Sie keine Notwendigkeit, sendet es pid. Dann können Sie das Signal an die pid senden. Um die pid bekommen Sie den Prozess mit Ruby beginnen.

p= IO.popen("lessc #{file} --watch")
pid= p.pid
Process.kill("INT", pid)

In Rubin gibt es mindestens 3 verschiedene Möglichkeiten, etwas auszuführen.

`lessc #{file} --watch` # returns stdout after exit
system("lessc #{file} --watch") # returns the integer return value after exit
Io.popen("lessc #{file} --watch") # returns imidietly an io object, where STDIN and STDOUT can be written and read

Sie verwendet system("lessc #{file} --watch&") die auch imidietly kehrt aber immer 0 zurück.

Andere Tipps

Hinweis: Was tut ^ C Strg-C wirklich zu tun in einer Shell

(Es ist kein Zeichen senden).

Klarstellung Hinweis: Diese PDF spricht über Signale . Beachten Sie, wo es auch über ^ C spricht. Sie können manuell ein Signal senden, je nach Bedarf.

Wenn Sie die Taste ^ C in einem Terminal es normalerweise das SIGINT Signal an das Programm sendet, der ausgeführt wird. Sie können auch diese Signale in Ruby senden. Weitere Informationen zum Arbeiten mit Prozessen arbeiten (und Senden von Signalen) in Ruby: http://whynotwiki.com/Ruby_/_Process_management .

Happy-Codierung.

weniger auch beendet, wenn der „q“ Charakter erhält, glaube ich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top