我想在composer update
文件中的composer install
或composer.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"
]
},
Symfony命令php bin/console kolesar:boilerplate:setup
是交互式脚本,需要一些用户输入,但这不起作用。交互式模式无法正常工作。
任何提示,如何解决?还是在composer update/install
之后强制设置另一个想法?
答案 0 :(得分:1)
您只需在脚本调用后加上“ < /dev/tty
”即可。
https://pantheon.io/blog/writing-composer-scripts:
可能会影响某些命令的另一个区别是,当直接从shell运行脚本时,标准输入将附加到TTY,但是在通过Composer运行时将是重定向的输入流。这会产生各种影响。例如,如果没有附加的TTY,Symfony控制台将不会调用interact()方法。例如,如果您试图编写测试交互性的功能测试(例如合并/带注释的命令项目),则可能会遇到问题。有几种解决此问题的方法。首先是明确指定在运行命令时标准输入应来自TTY
这有效地使Symfony控制台再次调用interact()方法;但是,此选项的缺点是它不那么可移植
我刚刚尝试过,它可以按预期工作。
请注意,如果对您很重要,链接的文章还提供了更便于携带的版本。
答案 1 :(得分:0)
在Windows上,在命令末尾添加< CON