如何在GitHub Actions中打印仓库文件层级?遇ls -R输出为空问题
解决GitHub Actions中无法打印仓库文件结构的问题
核心问题分析
- 未拉取仓库代码:你的Workflow缺少
actions/checkout步骤,GitHub Actions Runner默认不会自动拉取仓库代码,执行ls -R只能看到Runner环境的系统文件,而非main分支的内容。 - 输出格式不兼容:
ls -R的输出包含大量换行和特殊字符,直接通过echo "test=$(ls -R)" >> $GITHUB_OUTPUT写入时,GitHub会将换行识别为新的输出行,导致test变量被截断为空。
解决方案
方案1:直接打印文件结构(最简单,推荐)
无需通过GITHUB_OUTPUT传递,直接在步骤中执行ls -R,同时添加checkout步骤拉取仓库代码:
name: iOS list files workflow on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: job1: name: Just print all files runs-on: macos-latest steps: - name: Checkout repository uses: actions/checkout@v4 # 拉取当前仓库代码到Runner环境 - name: Print all files run: ls -R # 直接打印文件结构,日志中会完整显示输出
方案2:通过GITHUB_OUTPUT传递输出(需转义特殊字符)
如果必须将输出传递到后续步骤,可使用base64编码转义换行和特殊字符,传递后再解码:
name: iOS list files workflow on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: job1: name: Just print all files runs-on: macos-latest steps: - name: Checkout repository uses: actions/checkout@v4 - id: run_tests run: | # 用base64编码输出,避免换行导致的解析错误 echo "test=$(ls -R | base64)" >> $GITHUB_OUTPUT - name: dumping run: | # 解码后输出原内容 echo "${{steps.run_tests.outputs.test}}" | base64 --decode
验证说明
- 添加
checkout步骤后,Runner环境中会出现仓库文件,ls -R才能正确列出main分支的文件结构。 - 使用
base64编码后,所有特殊字符和换行都会被转为安全的单行字符串,确保GITHUB_OUTPUT能正确读取完整内容。
内容的提问来源于stack exchange,提问作者Abdul Ali Bangash
相关产品推荐
相关产品推荐

