О функции readline_completion_function
Я бы сказал, что, учитывая тип взаимодействия, которое вы ищете (apt-get autocomplete), этот метод не годится.
Фактически, прежде чем получить функцию автозаполнениявам нужно запустить скрипт, и вы получите доступ к функции автозаполнения.
Функция автозаполнения является частичной.Итак, это как автозаполнение bash, а не zsh.
В оболочке:
➜ ~ php test.php (enter)
Custom command: (tab)
a b c
Custom command: (tab)
a b c
Код:
<?php
// test.php
class AutoController
{
private static function getCommandsArray()
{
$my_dir = array('a', 'b', 'c');
return $my_dir;
}
/**
* The callback which is returning an array with strings, which will be
* auto-completed.
*
* @param $input
* @param $index
* @return array
*/
private static function completionCallback($input, $index)
{
return self::getCommandsArray();
}
/**
* The method which is handling the autocompletion. After it's runned, you can
* autocomplete your commands by hitting the tab-button.
*/
public function actionCompl()
{
readline_completion_function(array('self', 'completionCallback'));
$command_input = readline("Custom command: ");
passthru('echo ' . $command_input);
}
}
$a = new AutoController();
$a->actionCompl();
Об автозаполнении во время выполнения
Как предлагает c9s , можно получить такую функциональность, но extending
функциональность автозаполнения вашего bash, а не с PHP.
Итак, если вы видите функцию автозаполнения CLIFramework , например, вы увидите:
BashGenerator.php
ZshGenerator.php
, которая используется для генерации скрипта bash для расширения автозаполнения bash или zsh,
Таким образом, от используемой вами оболочки зависит способ выполнения автозаполнения.
Некоторые ссылки: