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

如何在GitHub Actions中用PowerShell运行just命令并解决shell报错?

问题

我希望在GitHub Actions流水线(actions.yaml)中调用justfile配置的命令,并且要求本地Windows环境和CI的Linux环境都通过PowerShell运行just命令,但执行时报错:

error: Recipe `ruff-show-violations` could not be run because just could not find the shell: No such file or directory (os error 2)

相关配置

本地Windows的justfile核心配置

# 硬编码使用Windows PowerShell
set shell := ["powershell.exe", "-c"]

# 其余命令配置(如install、ruff-show-violations等)省略

GitHub Actions的actions.yaml关键片段

jobs:
  lint-and-test:
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: pwsh
    steps:
      # 代码检出、Python/Poetry安装等前置步骤省略
      - name: Setup just
        uses: taiki-e/install-action@just
      
      - name: Enforce code style (Ruff)
        run: just ruff-show-violations
      # 其余调用just的步骤省略

问题根源:justfile中硬编码了Windows专属的powershell.exe,Linux环境下不存在该可执行文件,导致just无法启动shell执行recipe。

解决方案

方法1:让justfile自动适配跨系统的PowerShell路径

修改justfile的shell配置,利用just的条件判断语法,根据操作系统自动选择对应的PowerShell命令:

# 跨系统适配PowerShell路径
set shell := if windows { ["powershell.exe", "-c"] } else { ["pwsh", "-c"] }

# 其余命令配置保持不变
  • Windows环境下使用powershell.exe(系统默认Windows PowerShell)
  • Linux/macOS环境下使用pwsh(PowerShell 7+的跨平台命令)

方法2:通过环境变量覆盖just的shell设置

无需修改justfile,在GitHub Actions中通过JUST_SHELL环境变量指定shell:

单步骤生效

- name: Enforce code style (Ruff)
  run: just ruff-show-violations
  env:
    JUST_SHELL: pwsh -c

整个作业生效

jobs:
  lint-and-test:
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: pwsh
    env:
      JUST_SHELL: pwsh -c
    # 其余步骤不变

该环境变量会覆盖justfile中的shell配置,适合不想改动本地justfile的场景。

方法3:统一使用跨平台的pwsh命令

如果本地Windows环境已经安装了PowerShell 7+(支持pwsh命令),可以直接修改justfile使用跨平台命令:

set shell := ["pwsh", "-c"]

这种方式无需条件判断,Windows和Linux环境都能识别pwsh命令,前提是本地Windows已升级到PowerShell 7+。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:05:01