通过Bitbucket Pipelines SSH远程执行PHP命令时找不到PHP的问题
问题解决:Bitbucket Pipelines SSH执行脚本提示
php: command not found 核心原因
你遇到的问题本质是交互式SSH会话与非交互式SSH会话的环境变量加载逻辑差异:
- 本地手动SSH登录服务器属于交互式登录shell,会加载
~/.bashrc、/etc/bash.bashrc等配置文件,这些文件通常会把PHP的路径添加到$PATH中。 - Bitbucket Pipelines通过
ssh-run执行命令属于非交互式非登录shell,默认只会继承基础环境变量,不会加载~/.bashrc这类交互式配置,导致$PATH中缺少PHP的路径,因此找不到php命令。
验证方法
可以在Bitbucket的COMMAND里添加echo $PATH和which php,对比本地SSH登录后的输出,就能直观看到PATH的差异,以及PHP的实际绝对路径。比如在本地执行which php,可能得到类似/opt/plesk/php/8.0/bin/php的路径。
解决方案
方案1:临时在SSH命令中添加PHP路径
直接在执行的命令前临时扩展$PATH,把PHP的实际路径加进去,修改bitbucket-pipelines.yml中的COMMAND:
COMMAND: 'export PATH=$PATH:/opt/plesk/php/8.0/bin && php -v && cd drupal && git pull && cd scripts/deploy && ./deploy_dev.sh'
注意:把/opt/plesk/php/8.0/bin替换成你本地which php得到的实际路径。
方案2:修改远程服务器的非交互式shell配置
让非交互式shell也加载包含PHP路径的配置文件:
- 登录远程服务器,编辑
~/.bashrc文件,在开头添加以下内容:# 让非交互式shell也加载当前配置 if [[ $- != *i* ]]; then source ~/.bashrc exit fi - 把PHP的路径添加到
~/.profile文件中(非交互式shell会读取该文件):
同样替换为实际的PHP路径。export PATH=$PATH:/opt/plesk/php/8.0/bin
方案3:修改deploy_dev.sh脚本,使用PHP绝对路径
直接在deploy_dev.sh脚本中,把所有php命令替换成PHP的绝对路径,比如:
# 原命令 php some-script.php # 修改后 /opt/plesk/php/8.0/bin/php some-script.php
方案4:利用Plesk自带的PHP命令(针对Plesk环境)
Plesk提供了plesk php命令可以直接调用对应版本的PHP,你可以尝试在命令或脚本中用plesk php代替php,比如:
COMMAND: 'plesk php -v && cd drupal && git pull && cd scripts/deploy && ./deploy_dev.sh'
如果需要指定特定版本,还可以用plesk php8.0这类命令(根据你的PHP版本调整)。
内容的提问来源于stack exchange,提问作者Junni
相关产品推荐
相关产品推荐

