0

每隔一段时间,我就会启动使用 zsh 的 iTerm 2 来编写教程。有时,当我尝试运行我的 Ruby 测试时,它们没有运行。没有任何东西被退回。该过程永远不会运行,我必须 ctrl+C 才能摆脱它。

这是我运行的命令:

ruby -I test/unit/name_of_test.rb

这发生在我所有的测试中。有时我只需要重新启动计算机。有任何想法吗?

我也尝试过使用终端,它也在使用 zsh。

我在 OS X 上,使用 Ruby 1.9.3 和 Rails 3.2.8。

4

2 回答 2

2

这不是真正的 Ruby、iTerm 2、终端或 zsh 问题。相反,它不了解 *nix OS 应用程序如何处理来自 STDIN 的读取。

您看到的问题是-I指定$LOAD_PATH目录。结果,Ruby 使用您的 path/to/script 作为LOAD_PATH变量,然后挂起,等待来自 STDIN 的输入,因为它没有看到要运行的脚本。

而不是使用CNTRL+C或重新启动,使用CNTRL+ D。这将关闭输入流,这将导致 Ruby 退出,因为它没有找到要运行的命令。

您可以使用以下方法进行测试:

ruby -I /dev/null

在命令行。Ruby 将挂起,等待输入。关闭输入,Ruby 将立即退出。当然,如果你没有意识到这就是发生的事情,你最终可能会向 Ruby 输入一些有趣的命令,在看到CNTRL+之前它不会做任何事情D,然后可能会吐出各种信息性消息,但这是可以理解的,因为就口译员而言,输入可能是疯狂的谈话。

当它们从 STDIN 读取时,相同的CNTRL+D组合用于关闭来自各种其他 *nix 程序的输入。

于 2013-02-07T14:57:28.377 回答
1

嗬!在我写这篇文章时,我发现了我的问题,并认为我会继续提供答案,以防其他人这样做。在指定目录之前,我需要调整命令以包含单词test ,如下所示:

ruby -I test test/unit/name_of_test.rb
于 2013-02-07T14:39:14.627 回答