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

Bash脚本切换目录执行命令提示‘drush: command not found’求助

解决脚本中drush: command not found的问题

这个问题的核心原因是脚本运行时的shell环境和你手动执行命令时的环境不一样,具体来说:

当你手动在终端输入命令时,bash是交互式登录shell,会完整加载你的.bashrc(或者.bash_profile)里的环境变量配置,包括drush所在目录的PATH设置。但当你运行脚本时,bash是非交互式非登录shell,你的.bashrc里很可能有这样的判断:

[[ $- != *i* ]] && return

这行代码会让非交互式shell直接退出.bashrc的加载,导致你source了.bashrc却没拿到drush的PATH配置,自然找不到命令。

下面是几个可行的解决办法:

方法1:直接使用drush的绝对路径

这是最直接的方案,先手动执行以下命令获取drush的绝对路径:

which drush

假设输出是/home/yourusername/.composer/vendor/bin/drush,把脚本里的drush status改成绝对路径形式:

#!/bin/bash
source .bashrc && cd htdocs && /home/yourusername/.composer/vendor/bin/drush status

方法2:加载登录级别的环境配置

如果你的共享主机里有.bash_profile或者.profile文件(这些是登录shell会加载的配置,通常不会有非交互式退出的判断),可以把脚本里的source .bashrc改成:

#!/bin/bash
source ~/.bash_profile && cd htdocs && drush status

如果.bash_profile不存在,试试source ~/.profile。

方法3:手动在脚本中添加PATH

直接在脚本里把drush所在的目录添加到PATH环境变量中,比如你通过which drush知道路径是/home/yourusername/.composer/vendor/bin,脚本可以写成:

#!/bin/bash
export PATH="$PATH:/home/yourusername/.composer/vendor/bin"
cd htdocs && drush status

这种方式不需要依赖.bashrc的加载,稳定性更高。

额外检查

如果以上方法都不行,可以在脚本开头加上echo $PATH,运行脚本后对比手动执行echo $PATH的输出,看看drush所在的目录是否在脚本的PATH里,这样就能快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:08:25