如何在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
相关产品推荐
相关产品推荐

