更加安全的 Bash Shebang 配方

如果你正在写一个 bash Shebang 配方,考虑加入 set -euxo pipefail

foo:
  #!/usr/bin/env bash
  set -euxo pipefail
  hello='Yo'
  echo "$hello from Bash!"

严格意义上说这不是必须的,但是 set -euxo pipefail 开启了一些有用的功能,使 bash Shebang 配方的行为更像正常的、行式的 just 配方:

  • set -e 使 bash 在命令失败时退出。

  • set -u 使 bash 在变量未定义时退出。

  • set -x 使 bash 在运行前打印每一行脚本。

  • set -o pipefail 使 bash 在管道中的一个命令失败时退出。这是 bash 特有的,所以在普通的行式 just 配方中没有开启。

这些措施共同避免了很多 Shell 脚本的问题。

在 Windows 上执行 Shebang 配方

在 Windows 上,包含 / 的 Shebang 解释器路径通过 cygpath 从 Unix 风格的路径转换为 Windows 风格的路径,该工具随 Cygwin 一起提供。

例如,要在 Windows 上执行这个配方:

echo:
  #!/bin/sh
  echo "Hello!"

解释器路径 /bin/sh 在执行前将被 cygpath 翻译成 Windows 风格的路径。

如果解释器路径不包含 /,它将被执行而不被翻译。这主要用于 cygpath 不可用或者你希望向解释器传递一个 Windows 风格的路径的情况下。