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

如何在GitHub Actions中打印仓库文件层级?遇ls -R输出为空问题

解决GitHub Actions中无法打印仓库文件结构的问题

核心问题分析

  1. 未拉取仓库代码:你的Workflow缺少actions/checkout步骤,GitHub Actions Runner默认不会自动拉取仓库代码,执行ls -R只能看到Runner环境的系统文件,而非main分支的内容。
  2. 输出格式不兼容: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:25:21