在配方中设置变量

配方代码行是由 Shell 解释的,而不是 just,所以不可能在配方中设置 just 变量:

foo:
  x := "hello" # This doesn't work!
  echo {{x}}

使用 Shell 变量是可能的,但还有一个问题:每一行配方都由一个新的 Shell 实例运行,所以在一行中设置的变量不会在下一行中生效:

foo:
  x=hello && echo $x # 这个没问题!
  y=bye
  echo $y            # 这个是有问题的, `y` 在此处未定义!

解决这个问题的最好方法是使用 Shebang 配方。Shebang 配方体被提取出来并作为脚本运行,所以一个 Shell 实例就可以运行整个配方体:

foo:
  #!/usr/bin/env bash
  set -euxo pipefail
  x=hello
  echo $x