Composer 安装错误 - 输出不是 tty,输入不是 tty

Posted

技术标签:

【中文标题】Composer 安装错误 - 输出不是 tty,输入不是 tty【英文标题】:Composer installation error - output is not a tty, input is not a tty 【发布时间】:2016-02-10 20:44:12 【问题描述】:

我正在尝试通过 php 安装 composer,如他们的网站中所述。

php -r "readfile('https://getcomposer.org/installer');" | php

但它显示以下错误:

$ php -r "readfile('https://getcomposer.org/installer');" | php
output is not a tty
input is not a tty

我在 Windows 7 中并使用 git bash 执行此命令。在 windows 命令提示符下,它工作正常。仅当我从 git bash 2.6.2-64bit 运行此命令时才会出现此问题。

顺便说一句,我已经为 Windows 安装了作曲家,并且工作正常。但是我不能以这种方式下载composer.phar。我该如何解决这个问题?

【问题讨论】:

看起来好像问题在于您是从 git bash 而不是从 Windows 命令行运行命令。但是,如果没有指向您所说的说明的链接,就很难确定。 是的,Johnston,当我在 Windows 命令提示符下使用时,它工作正常。我刚刚测试过,但没有使用 git bash。你认为这是 git bash 的问题吗?但是我之前也可以将它与 git bash 一起使用(在其他计算机/其他 git bash 版本中)。 【参考方案1】:

可能是 PATH 或编码问题:

issue 25 提及:

似乎git ls-remote origin,从新构建和安装的 MinGW Git 运行无法输出任何内容,而git ls-remote origin | cat(从使用旧 MSys'/MinGW 的怪癖中学到的技巧)只说:@ 987654332@(退出码是127,提示找不到某个可执行文件,但是很难说是哪一个,因为连调试到stderr的打印语句都没有显示出来;看来是在crash或者死机的情况下( ), stderr 没有被刷新)

issue 519 甚至建议取消别名 winpty

  unalias $(alias | grep winpty | cut -d"=" -f1 | cut -d" " -f2)

但是:

不,我们不能简单地放弃 winpty。 PHP 可以交互运行,即它需要适当的 Win32 控制台。在 MinTTY 中运行没有 winpty 的 PHP 将不会提供该控制台实例,从而使您的终端看似无响应。

请参阅 git-for-windows/build-extra@44ed99b、#399 和 #400,了解仅删除这些别名会造成怎样的破坏。

所以现在,bash 控制台与通过管道执行 php 不兼容(因为第二个 | php 可能无法从 winpty 中受益,当程序需要 Win32 控制台进行交互使用时,这似乎是必需的)。

Peh 指出in the comments:

如果您使用 C:`Program Files\Git\bin\bash.exeinstead ofC:\Program Files\Git\git-bash.exe`,则该命令可以正常工作。 我将它与ConsoleZ 结合使用没有任何问题

这可能是因为bash.exe 不使用winpty,与git-bash.exe 相反。

【讨论】:

如果您使用C:\Program Files\Git\bin\bash.exe 而不是C:\Program Files\Git\git-bash.exe,那么该命令可以正常工作。我将它与ConsoleZ 结合使用没有任何问题。 @Peh 感谢您的反馈。我已将其包含在答案中以提高知名度。 谢谢 Vonc 和 Peh。【参考方案2】:

VonC 的回答是正确的,为了在未来帮助其他人,我想提供一个更直观的解决方案。

导航到 C:\Program Files\Git\bin 双击 bash.exe

您现在应该会看到命令提示符。

导航到您的 PHP 项目目录并安装 Composer。

$ cd C:\path\to\your\project

$ curl -sS https://getcomposer.org/installer | php

$ ls

文件composer.phar 现在在项目根目录中可见。

使用 composer 安装一个包。

$ php composer.phar 需要一些你想要安装的包

【讨论】:

很好的插图。 +1【参考方案3】:

可以使用bash输出:C:\Program Files\Git\bin\bash.exe

【讨论】:

以上是关于Composer 安装错误 - 输出不是 tty,输入不是 tty的主要内容,如果未能解决你的问题,请参考以下文章

如何检测标准输出是不是连接到 Perl 中的 tty?

错误“输入设备不是 TTY”

标准输出不是 tty。对节点 + 磁带 + Tap-spec 使用 bash

Composer 安装错误:ZipArchive::extractTo():完整提取路径超过 MAXPATHLEN (260)

如何修复 Composer 错误:“无法扫描目录中的类”?

docker 错误:输入设备不是 TTY。如果您使用的是 mintty,请尝试在命令前加上“winpty”[重复]