gpt4 book ai didi

css - ruby 命令行 : How can I send the CTRL-C command via text in the command line?

转载 作者:数据小太阳 更新时间:2023-10-29 07:49:05 30 4
gpt4 key购买 nike

我正在尝试创建一个简单的 Automator droplet,它将把 style.less 文件放入其中并在其上运行以下 LESS 命令:

$ LESSC {DROPPED_FILE} --watch

它将监视我放入的文件的任何更改,然后自动更新输出的 style.css

仅供引用:我正在使用 LESS 来动态编写 CSS 文件。更多信息是 here .

基本的 Droplet 效果很好。

  1. 拖放的文件被传递到一个变量中;为此:{MY_VAR}
  2. 我在 /usr/bin/ruby shell 中运行一个 shell 脚本如下 system("lessc {MY_VAR} --watch &")

这很好用,但是我希望 --watch 在退出 automator 应用程序时停止。

LESS 文档说在命令行 shell 中按 CTRL-C 快捷键可以中止脚本。

但由于我不在终端窗口内(命令在后台传递),我不知道如何中止脚本。

即使在 automator.app 已经关闭后,style.less 文件仍在被监视变化,相应生成的 style.css 仍在被重写。

所以基本上我需要在 .app 退出时传递中止命令。

我生成了一个简单的弹出窗口,点击它会在向终端 shell 传递另一个命令后关闭应用。

这是我停止脚本的所有尝试均未成功的部分。

是否有与按 CTRL-C 命令作用相同的命令行功能?我如何将它最好地传递给 shell?

最佳答案

如果您在控制台中按 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​​ 中至少有 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&"),它也立即返回但始终返回 0。

关于css - ruby 命令行 : How can I send the CTRL-C command via text in the command line?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1616982/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com