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