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

将Makefile的dev-open命令迁移至Justfile时遇语法错误求助

问题原因

报错是因为Just会对shebang recipe中的内容进行模板渲染,你写的Go模板里.NetworkSettings中的.被Just当成了模板变量的开头(Just模板中.代表当前上下文),导致解析错误。另外,Makefile里的$(shell)是Make专属语法,bash中不需要,直接用bash原生的命令替换$(...)即可。

解决方法

修改Justfile,转义Go模板中的.,并替换Make语法为bash原生写法,完整代码如下:

dev-open url="wordpress.docker.local":
    #!/usr/bin/env bash
    set -euxo pipefail
    # 用Just参数设置URL,也可保留bash默认值逻辑:URL="${URL:-{{ url }}}"
    URL="{{ url }}"
    # 替换URL中的点为转义后的点,用于sed正则匹配
    URL_REGEX=${URL//./\\.}
    # 转义Go模板中的`.`,避免Just解析报错
    DOCKER_IP=$(docker inspect "$(basename "$(pwd)")-wordpress-1" -f '{{ range \.NetworkSettings.Networks }}{{ \.IPAddress }}{{ end }}')
    # 删除hosts中旧的域名映射记录
    sudo sed -i "/${URL_REGEX}/d" /etc/hosts
    # 添加新的IP与域名映射到hosts
    sudo bash -c "echo \"${DOCKER_IP} ${URL}\" >> /etc/hosts"
    # 打开浏览器访问目标地址
    xdg-open "http://${URL}"
关键说明
  1. 转义模板字符:在Go模板的.NetworkSettings和.IPAddress前添加\,让Just将其解析为普通的.,而非模板变量的一部分。
  2. 移除Make专属语法:删除$(shell),直接用bash的$(command)完成命令替换。
  3. 复用Just参数特性:Just支持直接定义参数默认值,这里的url="wordpress.docker.local"可通过{{ url }}在bash中直接引用,也可保留bash的环境变量覆盖逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:12:29