在我们的项目中,我们有使用 windows 的开发人员和一些使用 linux 的开发人员。我们有 githooks 它使用 shebang 指向本地 Windows shell 执行程序,例如:
#!C:/Program\ Files/Git/usr/bin/sh.exe
REGEX_ISSUE_ID="[a-zA-Z0-9,\.\_\-]+-[0-9]+"
BRANCH_NAME=$(git symbolic-ref --short HEAD)
ISSUE_ID=$(echo "$BRANCH_NAME" | grep -o -E "$REGEX_ISSUE_ID")
LAST_COMMIT_MSG=$(git show -s --format=%s)
如您所见, shebang 指向 windows 文件夹。这对 linux 用户永远不起作用。有没有更好的方法来处理这个跨平台工作?
回答1
至少对于顶级 git 挂钩脚本(例如 .git/hooks/pre-commit
),Windows 的 git 将解释 #!/bin/sh
shebang 并为脚本使用 bash 解释器。
如果您随后在该脚本中编写与 posix-shell 兼容的代码,它将可以在 windows 和其他 posixly-correct 机器之间移植
根据我的经验,编写完全正确的 shell 有点痛苦,所以我有条件地在其他平台上使用 #!/usr/bin/env bash
和在 windows https://github.com/pre-commit/pre-commit/blob/e93c1c6f278b23f98f95c0e0706589f7932be298/pre_commit/commands/install_uninstall.py#L97-L102 上使用 #!/bin/sh
安装该脚本
然后,我建议酌情明确调用其他脚本(python 等)