mcpField
H
hyva-exec-shell-cmd

hyva-exec-shell-cmd

github.com/hyva-themes开发851.3k 次安装13 周前更新
代码仓库

关于 hyva-exec-shell-cmd

为 Magento 开发项目提供的辅助技能,可检测运行环境并给出相应的命令包装方式。供其他需要执行项目内命令的技能调用。

主要功能

  1. 01检测 Warden、docker-magento、DDEV 或本地环境
  2. 02按环境提供命令包装方式
  3. 03说明哪些命令无需包装
  4. 04支持通过标准输入运行容器内脚本

适用场景

  1. 01在不同 Magento 环境中执行 bin/magento 命令
  2. 02判断命令应在容器内还是主机上运行

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/hyva-themes/hyva-ai-tools --skill hyva-exec-shell-cmd

安装后在 Claude Code 中输入/hyva-exec-shell-cmd确认已加载。

附带文件scripts/detect_env.sh

详细介绍

在 Magento 环境中执行 Shell 命令

此工具技能可检测 Magento 开发环境,并提供适当的命令包装器来执行 Shell 命令。

用法

其他技能需要在 Magento 环境中执行命令时,应引用此技能。检测到的包装器可确保命令在正确的上下文(容器或本地环境)中运行。

第 1 步:检测环境

重要: 请从 Magento 项目根目录执行此脚本,或将该路径作为参数提供。

在任何需要执行 Shell 命令的技能开始时,运行一次此检测:

<skill_path>/scripts/detect_env.sh [magento_root_path]

其中,<skill_path> 是此 SKILL.md 文件所在的目录(例如 .claude/skills/hyva-exec-shell-cmd)。

可选参数 magento_root_path 指定 Magento 安装目录。如果省略,脚本将使用当前工作目录。

输出:warden、docker-magento、ddev 或 local

第 2 步:应用命令包装器

根据检测到的环境,按如下方式包装命令:

环境命令包装器描述
Wardenwarden env exec -T php-fpm bash -c "<command>"由 Warden 管理的 Docker 环境
docker-magentobin/clinotty bash -c "<command>"Mark Shust 的 docker-magento 配置
DDEVddev exec <command>DDEV 容器化环境
Local直接运行 <command>不使用容器的原生环境

示例

单条命令
# Warden
warden env exec -T php-fpm bash -c "bin/magento cache:clean"

# docker-magento
bin/clinotty bash -c "bin/magento cache:clean"

# DDEV
ddev exec bin/magento cache:clean

# Local
bin/magento cache:clean
带目录切换的命令
# Warden
warden env exec -T php-fpm bash -c "cd vendor/hyva-themes/magento2-default-theme/web/tailwind && npm run build"

# docker-magento
bin/clinotty bash -c "cd vendor/hyva-themes/magento2-default-theme/web/tailwind && npm run build"

# DDEV
ddev exec bash -c "vendor/hyva-themes/magento2-default-theme/web/tailwind && npm run build"

# Local
cd vendor/hyva-themes/magento2-default-theme/web/tailwind && npm run build

无需包装的命令

某些命令在主机系统上运行,不应进行包装:

  • composer 命令(在主机上运行,而非容器中)
  • git 命令
  • 主机文件系统上的文件操作(ls、find、cp,用于访问主机上的文件)
  • warden CLI 命令
  • ddev CLI 命令

集成模式

需要执行命令的技能应:

  1. 引用此技能:“使用 hyva-exec-shell-cmd 技能确定命令包装器”
  2. 使用第 1 步检测一次环境
  3. 保存包装器模式,以便在整个技能中使用
  4. 按照第 2 步,将包装器应用于所有容器命令

在环境中运行捆绑的技能脚本

某些技能附带了辅助脚本(例如 scripts/ 下的 PHP 脚本),必须通过 PHP/Node 解释器运行。在经过安全加固的主机上没有本地解释器,而且安装在用户级别(~/.../skills/...)的技能不在项目目录中,因此容器无法访问它。不要将脚本复制到项目树中:文件如何进入容器取决于不同环境(绑定挂载、Mutagen、命名卷),而且有些路径根本不会同步(例如,Warden 从独立卷提供 var/、generated/、pub/static、pub/media,因此在主机上写入这些目录的文件不会出现在容器中)。

相反,通过 stdin 将脚本流式传入解释器——此方法不受挂载/同步策略影响,无需临时文件,也无需清理:

  1. 检测环境(第 1 步)并确定包装器(第 2 步)。

  2. 容器化环境——通过包装器将脚本传递给 php /dev/stdin(使用非 TTY 的 -T exec,以便转发 stdin)。<skill_path> 是调用技能的 SKILL.md 文件所在目录:

    # Warden
    cat "<skill_path>/scripts/<script>.php" | warden env exec -T php-fpm bash -c "php /dev/stdin [args]"
    
    # docker-magento
    cat "<skill_path>/scripts/<script>.php" | bin/clinotty bash -c "php /dev/stdin [args]"
    
    # DDEV
    cat "<skill_path>/scripts/<script>.php" | ddev exec bash -c "php /dev/stdin [args]"
    

    脚本运行时,容器的工作目录为项目根目录,因此通过 getcwd() 定位项目的脚本可以照常运行。捕获 stdout 作为结果。

    此方法对脚本的限制: 脚本不能同时读取 stdin(stdin 中包含脚本本身),也不能依赖 __FILE__/__DIR__(其值为 /dev/stdin)——应改用 getcwd() 定位项目文件。

  3. local 环境:主机上没有解释器(已在安全加固时移除)。不要尝试直接运行脚本——请报告此步骤需要容器化开发环境(或本地解释器)。

评论

支持 Markdown