1

我需要使用 PHP 函数 exec() 获取 Linux 命令的完成变体。我试试这个:

$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() 但它没有用。

4

1 回答 1

2

最后我解决了这个问题。我发现我在终端会话和运行 PHP exec()(或 shell_exec())函数时使用了不同的 shell:

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 运行 shell 命令,如下所示:

$c = shell_exec('/bin/bash -c "compgen -c pyt"');

这对我有用。

于 2018-06-01T09:42:04.520 回答