Мне нужно получить варианты завершения для команд Linux, используя функцию PHP exec ().
Я пытаюсь это:
$c = exec('compgen -c pyt');
Я, кроме как получить что-то подобное
python3.5m
python3.5
python2.7
python2
python3
python3m
python
Но вместо этого я получаю ошибку:
sh: 1: compgen: не найден
Когда я выполняю эту команду непосредственно в терминале, вывод правильный:
omix@omix:~$ compgen -c pyt
python3.5m
python3.5
python2.7
python2
python3
python3m
python
Я также пытался использовать функцию shell_exec (), но она не работала.
Наконец я решил это.
Я обнаружил, что я использую разные оболочки в терминальной сессии и при выполнении PHP-функции exec () (или shell_exec ()):
omix@omix:~$ ps -p $$
PID TTY TIME CMD
15471 pts/0 00:00:00 bash
omix@omix:~$ php -a
Interactive mode enabled
php > echo shell_exec('ps -p $$');
PID TTY TIME CMD
15908 pts/0 00:00:00 sh
Теперь я запускаю команды оболочки из PHP следующим образом:
$c = shell_exec('/bin/bash -c "compgen -c pyt"');
Это работает для меня.
Других решений пока нет …