带有作曲家的交互式 PHP 脚本

Kol*_*sar 3 php symfony post-install composer-php symfony4

我想在文件之后composer updatecomposer installcomposer.json文件自动运行一个交互式 PHP 脚本,例如:

"scripts": {
    "raven-cmd": [
        "php bin/console kolesar:boilerplate:setup"
    ],
    "auto-scripts": {
        "cache:clear": "symfony-cmd",
        "assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd",
        "assets:install %PUBLIC_DIR%": "symfony-cmd"
    },
    "post-install-cmd": [
        "@auto-scripts",
        "@kolesar-cmd"
    ],
    "post-update-cmd": [
        "@auto-scripts",
        "@kolesar-cmd"
    ]
},
Run Code Online (Sandbox Code Playgroud)

Symfony 命令php bin/console kolesar:boilerplate:setup是需要一些用户输入的交互式脚本,但这不起作用。交互模式确实不起作用。

任何提示,如何解决这个问题?或者也许有另一个想法在之后强制设置composer update/install

Den*_*ter 5

你可以简单地< /dev/tty在你的脚本调用之后加上“ ”。

https://pantheon.io/blog/writing-composer-scripts

还有另一个可能会影响某些命令的差异,那就是当脚本直接从 shell 运行时,标准输入将附加到 TTY,但在通过 Composer 运行时将是重定向的输入流。这可能会产生各种影响;例如,如果没有附加 TTY,Symfony 控制台将不会调用 interact() 方法。例如,如果您尝试编写测试交互的功能测试,这可能会妨碍您,就像整合/注释命令项目所做的那样。有几个选项可以解决这种情况。第一个是在运行命令时明确指定标准输入应该来自 TTY

这有效地让Symfony 控制台再次调用interact() 方法;然而,这个选项的缺点是它不那么便携

我刚刚尝试过,它按预期工作。

请注意,链接文章还提供了一个更便携的版本,以防万一这对您很重要。