Laravel 13 的交互式 Artisan 提示在 Windows 11 上会立即退出(退出码 255)

后端开发 2026-07-07

问题

我在 Windows 11 上使用 Laravel 13 时遇到了一个奇怪的问题。

任何需要交互输入的 Artisan 命令在我还没输入任何内容时就会立即退出。

例如:

php artisan migrate

输出:

WARN  The database 'fito-db' does not exist on the 'mysql' connection.

Would you like to create it? (yes/no) [yes]
❯

此时,进程会立即退出,PowerShell 返回到提示符。

运行:

echo $LASTEXITCODE

返回:

255

没有 异常堆栈跟踪,以及 错误信息


环境

  • Windows 11
  • PHP 8.4.15 (CLI)
  • Laravel Framework 13.8
  • Symfony Console (随 Laravel 13 一起提供)
  • PowerShell
  • Windows Terminal

同样的行为也出现在:

  • Windows PowerShell
  • PowerShell 7
  • CMD
  • Windows Terminal

我已验证的事项

STDIN 能正确工作

php -r "echo 'type: '; var_dump(fgets(STDIN));"

输出:

type:
hello

string(6) "hello
"

STDIN 是交互式的

php -r "var_dump(stream_isatty(STDIN));"

输出:

bool(true)

Xdebug 不是原因

使用以下方式运行:

php -d xdebug.mode=off artisan migrate

产生的行为与之前完全相同。


Tinker 正常工作

php artisan tinker

我可以正常输入命令:

> print("hello")

hello

因此,交互输入本身是可以工作的。


非交互模式可用

php artisan migrate --no-interaction

命令会正常继续执行(只是因为数据库不存在而失败,这是预期之事)。


额外观察

这个问题只出现在 新的 Laravel 项目(Laravel 13) 上。

同一台机器上的较旧 Laravel 项目(Laravel 10/11)并没有这个问题。

因为 Tinker 可以工作且 STDIN 互动,我不认为这是一个通用的 PHP STDIN 问题。

似乎只有在 Laravel 遇到其中一个交互式确认提示时才会发生(例如 confirm())。


我调查过的内容

从阅读 Laravel 的源代码来看,交互式提示现在通过 laravel/prompts,最终进入 Symfony Console。

我在想这是否与以下方面相关:

  • Laravel Prompts
  • Symfony Console
  • Windows ConPTY / 终端处理
  • 在 Windows 上的 PHP 8.4
  • 已知的 Laravel 13 回归

WSL

一个可能相关也可能无关的细节:

WSL 在我的机器上似乎有问题。

如果我从 Windows 资源管理器的上下文菜单中选择 "在此处打开 Linux Shell",终端会打开并立即关闭。

我不确定这是否相关,因为我是在 Windows 原生运行 PHP,而不是在 WSL 内。


问题

是否有人在 Windows 上使用 Laravel 13 时遇到过这个问题?

是否存在与 Laravel PromptsSymfony Console 相关的已知问题,会在退出码为 255 时使交互式 Artisan 命令立即退出,同时:

  • STDIN 正常工作,
  • stream_isatty(STDIN) 返回 true
  • php artisan tinker 正常工作,
  • 只有交互式确认提示失败?

如果有指向相关 GitHub 问题或已知的 Windows 专用错误的线索,将不胜感激

答案 1

语法错误、不存在的类、命名空间拼写错误。你能检查 .env 配置以验证数据库访问吗? Tinker 不使用数据库连接,因此运行它没有问题。 使用以下命令查看堆栈跟踪:

php artisan migrate -vvv

你可以将整个输出日志保存到一个文件:

php artisan migrate 2>&1 | tee error.log

获得 error.log 之后,能否分享消息日志?


来源:Stack Overflow 原问题

作者:提问:AmirHossein Najjarbshi;回答:Mince net;许可协议:CC BY-SA 4.0

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章