更加安全的 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 风格的路径的情况下。