php - Composer 脚本中的用户输入

标签 php bash composer-php

在 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 install 之后我得到了这个错误:

...
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

如何在 composer 脚本中请求用户输入?

最佳答案

好的,您正在尝试执行 bash/shell 脚本来读取字符串并将其传递给您的 php 文件。我不确定,为什么那行不通。

另一种方法是保留在 post-install-cmd 的 PHP 代码中。 那是一个事件,它可以访问 Composer 和 IO。 要使用控制台,您需要来自 Composer 的 $io 对象。 您可以使用 getIO() 获取它。

然后您可以使用方法 ask()askConfirmation() 以交互方式询问用户“缺失”值。

非常简短:

$io = $this->getIO();
$user = $io->ask('Enter your Username: ');
/// Its better not displaying the password:
$pw = $io->askAndHideAnswer('Enter your Password: ');

exec('php setup/index.php database_password=' . escapeshellarg($pw));

关于php - Composer 脚本中的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34381504/

相关文章:

php - PHP中关联数组的多排序

php - 主文件夹和子文件夹的不同命名空间

Linux bash : how to replace 2 words in a file from bash command line

bash - 将 bash 替换为循环变量以获取数组名称

php - 致命的 : reference is not a tree on composer install

netbeans-7 - 无法在 NetBeans 中使用 Composer 安装包

Java (Android) aes-128-cbc 解密为明文不一致

php - mysql插入查询,自增字段有问题

javascript - 如何在 JS 中编码 URL 并在 PHP 中解码?

linux - 使用或命令在两个目录上查找文件的 unix 顺序