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

如何让Packer正确执行echo -e命令?

解决Packer中echo -e执行不符合预期的问题

问题原因

Packer的shell provisioner默认使用dash(Debian/Ubuntu系统的默认sh),而dash的echo命令不支持-e选项,会把-e直接当作输出内容,导致出现你遇到的异常结果。

解决方案

方案1:明确用bash执行命令

把inline命令用bash -c包裹,强制使用支持-e参数的bash版echo:

provisioner "shell" {
  environment_vars = [
    "DEBIAN_FRONTEND=noninteractive",
  ]
  inline = [
    "bash -c 'echo -e \"new\nline\" | tee -a /home/ubuntu/new_file.txt'",
  ]
}

方案2:改用printf命令(推荐,跨平台兼容性更好)

printf本身支持转义字符,无需依赖echo的-e选项,稳定性更强:

provisioner "shell" {
  environment_vars = [
    "DEBIAN_FRONTEND=noninteractive",
  ]
  inline = [
    "printf \"new\nline\n\" | tee -a /home/ubuntu/new_file.txt",
  ]
}

注意末尾要额外加\n,因为printf不会像echo那样自动追加换行符。

方案3:指定shell provisioner使用bash

在shell provisioner配置中直接指定使用bash,让整个脚本都以bash环境执行:

provisioner "shell" {
  environment_vars = [
    "DEBIAN_FRONTEND=noninteractive",
  ]
  shell = "/bin/bash"
  inline = [
    "echo -e \"new\nline\" | tee -a /home/ubuntu/new_file.txt",
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:52:43