在composer包中,我有post-install-cmd脚本,如下所示:
#!/bin/bash
echo 'Hello!'
read -p 'Database password: ' DB_PASS
PHP setup/index.PHP database_password=$DB_PASS
echo 'Complete!'
但是在composer安装后我遇到了这个错误:
...
Generating autoload files
> post-install-cmd: _scripts/ask_db_data.sh
Executing command (CWD): _scripts/ask_db_data.sh
Hello!
Script _scripts/ask_db_data.sh handling the post-install-cmd event returned with an error
[RuntimeException]
Error Output: Hello!
Exception trace:
() at phar:///usr/local/bin/composer/src/Composer/Eventdispatcher/Eventdispatcher.PHP:196
Composer\Eventdispatcher\Eventdispatcher->dodispatch() at phar:///usr/local/bin/composer/src/Composer/Eventdispatcher/Eventdispatcher.PHP:94
Composer\Eventdispatcher\Eventdispatcher->dispatchScript() at phar:///usr/local/bin/composer/src/Composer/Installer.PHP:350
Composer\Installer->run() at phar:///usr/local/bin/composer/src/Composer/Command/InstallCommand.PHP:134
Composer\Command\InstallCommand->execute() at phar:///usr/local/bin/composer/vendor/symfony/console/Command/Command.PHP:256
Symfony\Component\Console\Command\Command->run() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.PHP:838
Symfony\Component\Console\Application->doruncommand() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.PHP:189
Symfony\Component\Console\Application->doRun() at phar:///usr/local/bin/composer/src/Composer/Console/Application.PHP:167
Composer\Console\Application->doRun() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.PHP:120
Symfony\Component\Console\Application->run() at phar:///usr/local/bin/composer/src/Composer/Console/Application.PHP:98
Composer\Console\Application->run() at phar:///usr/local/bin/composer/bin/composer:43
require() at /usr/local/bin/composer:25
我如何在作曲家脚本中询问用户输入?
解决方法:
好的,您正在尝试执行bash / shell脚本来读取字符串并将其传递给您的PHP文件.我不确定,为什么这样做不成功.
另一种方法是留在post-install-cmd的PHP代码中.
这是一个事件,它可以访问Composer和IO.
要使用Console,您需要Composer中的$io对象.
您可以使用getIO()获取它.
然后,您可以使用方法ask()或askConfirmation()以交互方式询问用户“缺失”值.
非常简短:
$io = $this->getIO();
$pw = $io->ask('Enter your Password: ');
exec('PHP setup/index.PHP database_password=' . escapeshellarg($pw));