Domanda

Sto cercando di creare un semplice drop di Automator che prenderà il file style.less inserito in esso ed eseguirà il seguente comando LESS su di esso:

$ LESSC {DROPPED_FILE} --watch

che monitorerà il file che ho inserito per eventuali modifiche e aggiornerà automaticamente il style.css in uscita

Cordiali saluti: sto usando MENO per avere file CSS scritti dinamicamente. Ulteriori informazioni sono qui .

La gocciolina di base funziona alla grande.

  1. Il file rilasciato viene passato in una variabile; A tal fine: {MY_VAR} .
  2. Eseguo uno script di shell nella shell / usr / bin / ruby ?? come segue sistema (" lessc {MY_VAR} --watch & amp; ")

funziona alla grande ma voglio che --watch venga arrestato quando si esce dall'app di automazione.

La documentazione LESS dice di premere il collegamento CTRL-C mentre si è nella shell della riga di comando per interrompere lo script.

Ma dal momento che non sono all'interno della finestra del terminale (il comando viene passato in background) non so come interrompere lo script.

Anche dopo la chiusura di automator.app, il file style.less viene ancora monitorato per le modifiche e il style.css generato di conseguenza viene ancora riscritto.

Quindi in pratica devo passare il comando abort all'uscita di .app.

Ho generato un semplice pop-up che al clic chiuderà l'app dopo passando un altro comando alla shell del terminale.

Questa è la parte in cui tutti i miei tentativi non sono riusciti a fermare la sceneggiatura.

Esiste una funzione della riga di comando che agisce come se si premesse il comando CTRL-C? Come potrei passare il meglio alla shell?

È stato utile?

Soluzione

Se si preme CTRL-C nella console, questo non viene inviato tramite STDIN al programma. Bash (o qualunque cosa tu usi) tratta lo speciale CTRL-C. Il bash invia un segnale al processo. Nel caso di CTRL-C questo è SIGINT. Per inviare un segnale a un programma non è necessario che sia pid. Quindi è possibile inviare il segnale al pid. Per essere in grado di ottenere il pid puoi iniziare il processo con ruby.

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

In ruby ??ci sono almeno 3 modi diversi di eseguire qualcosa.

`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

Hai utilizzato il sistema (" lessc # {file} --watch & amp; ") che restituisce anche in modo imidioso ma restituisce sempre 0.

Altri suggerimenti

Suggerimento: cosa fa ^ C Control-C veramente in una shell?

(Non invia un personaggio).

Chiarimento su suggerimento: Questo PDF parla di segnali . Nota dove parla anche di ^ C. Puoi inviare manualmente un segnale come richiesto.

Quando si preme ^ C in un terminale normalmente invia il segnale SIGINT al programma in esecuzione. Puoi inviare questi segnali anche in Ruby. Ulteriori informazioni su come lavorare con i processi (e inviare segnali) in Ruby: http://whynotwiki.com/Ruby_/_Process_management .

Buona codifica.

less termina anche quando riceve il simbolo "q" personaggio, credo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top