能否在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
相关产品推荐
相关产品推荐

