如何在GitHub Action中运行cat命令并解决其不生效的问题
问题根源
你使用的<(echo ";")属于Bash专属的进程替换语法,GitHub Actions默认的脚本执行环境是兼容POSIX标准的sh,不支持该特性,因此整行cat命令会直接执行失败,表现为命令被忽略、没有生成目标文件。
修复方案
方案1:显式指定使用Bash执行脚本
如果是把命令写在GitHub Actions的run字段中,添加shell: bash参数即可:
- name: 合并JS资源 run: | cat js/styleswitch.js <(echo ";") js/navigation.js <(echo ";") js/browsercheck.js > js/header.js rm js/styleswitch.js js/navigation.js shell: bash
如果是执行独立的.sh脚本,在脚本头部添加shebang行#!/bin/bash,执行时使用bash 你的脚本名.sh而非sh 你的脚本名.sh调用即可。
方案2:改写命令兼容POSIX标准
不想修改shell配置的话,可以把命令改写为无依赖的通用写法,效果完全一致:
{ cat js/styleswitch.js; echo ";"; cat js/navigation.js; echo ";"; cat js/browsercheck.js; } > js/header.js rm js/styleswitch.js js/navigation.js
该写法使用代码块组统一重定向输出,所有POSIX兼容的shell都可以正常执行。
额外排查项
如果修复后仍识别不到生成的文件,可做两项检查:
- 在
cat命令前添加ls -la js/,确认执行命令前三个源JS文件确实存在,路径配置正确 - 确认推送生产分支的步骤在
cat命令之后执行,没有工作目录切换、缓存重置等操作覆盖生成的header.js
内容的提问来源于stack exchange,提问作者MrVauxs
相关产品推荐
相关产品推荐

