2009-10-24 59 views
3

我試圖創建一個簡單的Automator液滴,將採取style.less文件投進,並在其上運行以下less命令:Ruby命令行:如何通過命令行中的文本發送CTRL-C命令?

$ LESSC {DROPPED_FILE} --watch

將監視我有任何的改變下降的文件然後將自動更新輸出style.css

僅供參考:我使用LESS來動態編寫CSS文件。更多信息是here

基本液滴效果很好。

  1. 被拖放的文件被傳遞給一個變量;爲此:{MY_VAR}
  2. 我跑在/usr/bin/ruby外殼shell腳本如下system("lessc {MY_VAR} --watch &")

這個工程很大但是我想在退出Automator的應用程序要停止的--watch。

LESS文檔說在命令行shell中按下CTRL-C快捷鍵以中止腳本。

但由於我不在終端窗口(命令在後臺傳遞),我不知道如何中止腳本。

即使在關閉automator.app之後,style.less文件仍在觀察更改並且相應生成的style.css仍在被重寫。

所以基本上我需要在.app的退出時通過abort命令。

我生成了一個簡單的彈出窗口,點擊後將關閉應用程序傳遞另一個命令到終端外殼。

這是我所有嘗試都不成功停止腳本的部分。

是否有一個命令行功能與按下CTRL-C命令相同? 我如何將這個最好的東西傳遞給shell?

回答

6

如果您在控制檯中按下CTRL-C,則不會通過STDIN將其發送到您的程序。 Bash(或任何你使用的)對待CTRL-C特別。 bash發送一個信號給進程。在CTRL-C的情況下,這是SIGINT。要發送信號給程序,你需要不要它是PID。然後你可以把信號發送到pid。爲了能夠獲得pid,你可以用ruby開始這個過程。

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

在ruby中,至少有三種不同的方式來執行某些操作。

`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 

您使用system("lessC#{file} --watch&")這也返回imidietly但總是返回0

+0

感謝您抽出寶貴時間。一個簡單的問題,我確實是命令行ruby的新東西,到目前爲止只有幸運的複製粘貼和以下說明我可以在網上找到,在這種情況下:我不太清楚如何真正運行命令給我......如何將我的終端實例輸入到「ruby」模式?另外:每行都是一個單獨的命令(就像我在第一行輸入'return'然後按第二行' – Jannis 2009-10-24 20:28:47

+0

')當我看到ruby標籤時,我認爲你想寫一個ruby腳本。 – johannes 2009-10-24 23:23:50

0

當我收到「q」字符時,它也會終止。

+0

嗯..我試圖做'$ lessc q',並沒有不幸的是工作。感謝這個想法,不勝感激。 – Jannis 2009-10-24 09:29:20

1

提示:究竟是什麼^ C Control-C真的是在shell中做?

(它不發送字符)。

澄清提示: This PDF talks about signals。注意它在哪裏還談到^ C。您可以根據需要手動發送信號。

當您在終端中按^ C時,它通常會將SIGINT信號發送到正在運行的程序。你也可以在Ruby中發送這些信號。有關在Ruby中使用進程(以及發送信號)的更多信息:http://whynotwiki.com/Ruby_/_Process_management

快樂編碼。

+0

這是否意味着沒有辦法停止腳本而不使用終端並實際按下CTRL-C組合鍵? – Jannis 2009-10-24 09:27:03

+0

沒有。一個互動終端只是截取^ C,並使其做一些特殊的事情。例如,與一般的真^ D和^ Z一樣。您可以直接執行終端的操作。 – 2009-10-24 09:31:27

+0

我通過PDF閱讀,但我很難理解,因爲我遠不是程序員。我只是想創建這個小水滴,以使我的工作流程從長遠來看更快。 看來,這不是我的選擇。 非常感謝你的提示,也許如果我在這方面有更多的知識,我會更好地理解它。 – Jannis 2009-10-24 09:54:35