红宝石的命令行:怎么我可以发送的CTRL-C命令通过的文本在该命令行?
-
06-07-2019 - |
题
我试图建立一个简单的自动化器滴会采取的 style.less
文件丢弃到它和运行下面的小命令:
$ LESSC {DROPPED_FILE} --watch
它将监测该文件我已经放弃了在对任何更改,并随后将会自动更新的输出 style.css
供参考:我使用的不到有动态写CSS文件。更多信息 在这里,.
基本的液滴的伟大工程。
- 删除的文件是通过成为一个变量;为此目的:
{MY_VAR}
. - 我运行一个壳中的脚本
/usr/bin/ruby
壳如下system("lessc {MY_VAR} --watch &")
这个伟大的作品但是我想要的-看须停止在戒烟的自动化器应用程序。
少文件说,按CTRL-C快捷,同时在命令行壳中止该脚本。
但因为我不是终端内部窗口(命令正在通过在该背景)我不知道中止该脚本。
甚至后自动化器.程序已经关闭了 style.less
文件仍然是正在看着的变化及相应产生 style.css
还是正在改写。
所以基本上我需要通过中止命令对退出的.应用程序。
我已经产生一个简单的弹,击将关闭程序 后 通过另一个命令为终端的外壳。
这是我所有的尝试已经失败为止。
是有一个命令的功能作一样按CTRL-C命令?我将如何通过这个的最好的外壳?
解决方案
如果你按CTRL-C在你的控制台,这是不能发送的通过标准输入到你的节目.庆典(或什么使用)将按CTRL-C特别的。Bash发送一个信号的程序。在情况下的CTRL-C这是信号情报.发送一个信号,以一个程序需要有它的pid。然后你可以发送的信号pid。能够获得pid你可以开始处理与红宝石。
p= IO.popen("lessc #{file} --watch")
pid= p.pid
Process.kill("INT", pid)
在红宝石至少有3个不同的方式,执行一些东西。
`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。
其他提示
提示:什么^C 控制-C 真的 做一个外壳?
(它不会发送一个字符)。
澄清在提示: 此 PDF谈到信号.注意到它还谈^C。你可以手动发送信号的要求。
当你按下^C在一个终端的通常发送的信号情报信号的程序正在运行。你可以送这些信号的红宝石。更多的信息有关的工作流程(和发送信号)在红宝石: http://whynotwiki.com/Ruby_/_Process_management.
快乐的编码。
不太也终止时,收到"q"性质,我想。