3

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

"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"
    ]
},

Symfony 命令php bin/console kolesar:boilerplate:setup是交互式脚本,期望一些用户输入,但这不起作用。确切地说,交互模式不起作用。

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

4

2 回答 2

5

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

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

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

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

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

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

于 2019-09-17T14:19:40.620 回答
0

在 Windows 上添加< CON到命令的末尾

于 2020-10-23T19:50:55.147 回答