【发布时间】:2015-03-30 01:51:44
【问题描述】:
我需要的是:
在调用系统命令之前执行一些操作。
-
执行我的系统命令
涉及提示并从用户那里获取答案
保持 ctrl-c 对调用命令的影响不变
获取我的系统命令的结果并继续执行更多 ruby 代码
到目前为止,我尝试了一些看起来像:
#!/usr/bin/env ruby
p "Foo"
exit_value = exec 'heroku run console'
p "Bar"
exit exit_value
这个失败是因为 exec 替换并终止了当前进程,所以在 exec 之后不再执行 ruby 代码
我已经阅读了这篇文章: How to run code after ruby Kernel.exec
我尝试使用 Kernel#system 调用:
#!/usr/bin/env ruby
p "Foo"
system 'heroku run console'
p "Bar"
exit $?
这个也失败了,因为 ctrl-c 显然被我的 ruby 进程捕获并杀死它而不是达到它的预期目标。
那么,有没有办法处理这些特殊要求?
【问题讨论】:
-
您可以使用
Ctrl+d取消预处理中的输入。 -
抱歉,问题不在于如何停止 cat 命令 ^^° 我只是使用 cat 命令来提供可以在任何 *nix 系统上运行的示例,但命令需要获取消息的是heroku工具带的heroku,并且ctrl-d不会在那里替换ctrl-c。
-
Ctrl+d适用于任何从标准输入读取的 *nix 程序 -
是的。虽然当程序不从标准输入读取时,我仍然非常希望有机会用一个大的 ctrl-c 来阻止它 ^^ 发送 ctrl-c 的能力真的是我的问题,而不是在标准输入上发送输入结束的能力。