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

能否在Bash环境下向Elixir传递heredoc格式多行脚本?

GitHub Actions 中执行多行Elixir内联脚本方案

elixir -e 参数的作用是接收单行内联代码字符串作为执行入参,你之前的heredoc写法不生效,核心原因是shell的heredoc重定向默认会把内容传入命令的标准输入流,并不会自动作为-e后面的命令行参数传入,会直接触发参数解析错误。

不需要创建独立脚本文件,直接在run步骤中写多行Elixir代码有两种可行方案:

方案1:通过标准输入传参(无转义问题,最简便)

不传-e参数时,Elixir会默认读取标准输入的内容作为代码执行,直接将heredoc重定向给elixir命令即可:

# 安装Elixir
- uses: erlef/setup-beam@v1
  with:
    elixir-version: ${{ env.ELIXIR_VERSION }}
# 执行多行Elixir代码
- run: |
    elixir <<-EOT
      IO.puts("多行脚本测试")
      calc_result = 68 + 1
      IO.puts("计算结果:#{calc_result}")

      # 支持任意合法Elixir语法,无行数限制
      test_list = [1, 2, 3, 4]
      IO.inspect(test_list, label: "列表输出")
    EOT

这种写法不需要处理引号转义,代码缩进可以和工作流层级自然对齐,不会出现格式解析问题。

方案2:作为-e参数传入

如果有特殊场景必须使用-e参数,可以通过命令替换读取heredoc内容,作为-e的入参传入:

- run: |
    elixir -e "$(cat <<-EOT
      IO.puts(68 + 1)
      IO.puts("通过-e参数执行多行脚本")
    EOT
    )"

注意必须用双引号包裹命令替换部分,避免shell将代码中的换行符替换为空格,导致Elixir代码解析失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:45:35