You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PHP exec()中调用Linux内置工具compgen提示未找到如何解决?

解决PHP exec()调用compgen命令提示"not found"的问题

这个问题我之前碰到过,根源其实很明确:compgen是Bash专属的内置命令,而PHP的exec()、shell_exec()这类函数默认调用的是系统的sh shell(在多数Linux发行版里,sh其实是Dash的软链接,一个轻量级的POSIX兼容shell),Dash并没有compgen这个命令,所以才会抛出sh: 1: compgen: not found的错误。

而你在终端直接执行能成功,是因为终端默认使用的是Bash,自然能识别这个内置命令。

解决方法:显式指定用Bash执行命令

只需要在你的命令前加上bash -c,让Bash来处理compgen命令就行:

// 使用exec()的写法,会返回最后一行输出
$c = exec('bash -c "compgen -c pyt"');

// 如果用shell_exec(),可以拿到完整的所有补全结果
$output = shell_exec('bash -c "compgen -c pyt"');

执行后就能得到你预期的类似python3.5m python3.5 python2.7 python2 python3 python3m python的结果了。

额外验证小技巧

你可以先确认PHP当前默认使用的shell是什么:

echo shell_exec('echo $SHELL');

输出大概率是/bin/sh,这也能佐证为什么直接调用compgen会失败。

内容的提问来源于stack exchange,提问作者hungl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:56:10