stty:stdin不是终端?

时间:2013-11-20 04:47:54

标签: ruby ruby-on-rails-3 osx-mountain-lion

我正在尝试使用我在网上找到的说明安装Homebrew for OS X 10.8.5。我这样做是因为我可以更新我的Ruby版本,因为我收到了这个错误:

Use RbConfig instead of obsolete and deprecated Config.

当我尝试跑步时:

gem install sqlite3

然而,当我跑步时:

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

我收到另一个错误:

stty: stdin isn't a terminal
Failed during: /bin/stty raw -echo
stty: stdin isn't a terminal
Failed during: /bin/stty -raw echo

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

当我想为Mac OSX 10.9.1安装自制程序时,我遇到的情况和你的情况完全相同。我发现在终端输入:

curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install | ruby

它对我有用。在自制问题板上有一个关于这个问题的主题。

https://github.com/Homebrew/homebrew/issues/19276

答案 1 :(得分:1)

对于那些对仍然使用"管道来感兴趣的人来说,"技术,自制软件的github位置已经改变。这里的命令已更新到新位置:

curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install | ruby

答案 2 :(得分:0)

当标准输入是文件时,它不是终端,因此在stty的标准输入上设置终端属性将不起作用。

一开始听起来很愚蠢,但你可能会发现你可以使用stdout或stderr作为stty的输入,它会调整终端。因此:

system("stty cbreak -echo <&2");

因此,您可以从https://raw.github.com/mxcl/homebrew/go下载脚本并修改标有system "/bin/stty raw -echo"system "/bin/stty raw -echo <&2"

的行

然后将修改后的文件输入ruby -e

部分来自:(unix/C) "stty: stdin isn't a terminal" when using system() function

答案 3 :(得分:0)

system "/bin/stty raw -echo <&2"的解决方案对我不起作用。我不得不蛮力评论这一行:system "/bin/stty raw -echo"。 然后它奏效了。