XAMPP中exec执行含extglob的shell命令时遇语法错误
问题原因
PHP的exec()函数默认调用sh shell,而你使用的!(*.xml)是bash特有的**扩展通配符(extglob)**特性,sh不支持该语法,因此抛出语法错误。你在终端直接执行时用的是bash,所以能正常运行。
解决方案
方案1:指定用bash执行命令
明确让命令在bash环境下运行,将整个命令包裹在bash -c中:
exec('bash -c "shopt -s extglob && cd /opt/lampp/htdocs/testes/xml/ && rm !(*.xml)"');
或者调整引号避免冲突:
exec("bash -c 'shopt -s extglob && cd /opt/lampp/htdocs/testes/xml/ && rm !(*.xml)'");
方案2:用find命令替代(更通用安全)
不依赖bash的扩展特性,使用find命令实现相同效果,兼容性更好:
exec('cd /opt/lampp/htdocs/testes/xml/ && find . -maxdepth 1 -type f ! -name "*.xml" -delete');
-maxdepth 1:仅处理当前目录,不递归子目录-type f:仅匹配文件,避免误删目录! -name "*.xml":排除xml后缀的文件-delete:删除匹配到的文件
内容的提问来源于stack exchange,提问作者themadmassa
相关产品推荐
相关产品推荐

