如何检测Git自定义命令脚本是否以`git foo`方式调用?
解决Git自定义命令脚本的调用显示问题
方法一:通过父进程判断
在Shell脚本中,可通过获取父进程信息区分调用方式:
- 获取当前脚本的父进程ID:
PPID=$(ps -o ppid= -p $$ | tr -d ' ')
- 获取父进程的命令名称:
PARENT_CMD=$(ps -o comm= -p "$PPID" | tr -d ' ')
- 根据父进程类型设置显示内容:
if [ "$PARENT_CMD" = "git" ]; then # 以git foo方式调用,显示git foo USAGE="git foo" else # 直接运行脚本,显示git-foo USAGE=$(basename "$0") fi # 示例用法输出 echo "用法: $USAGE [可选参数]"
这种方式在Linux、macOS、BSD系统上通用,tr -d ' '用于清理ps输出中的多余空格。
方法二:读取父进程完整命令行(Linux专属)
Linux系统可通过/proc文件系统直接获取父进程的完整命令行,精准判断是否为git foo调用:
# 读取父进程命令行并将空分隔符替换为空格 PARENT_CMDLINE=$(cat /proc/$PPID/cmdline | tr '\0' ' ') if [[ "$PARENT_CMDLINE" == *"git foo"* ]]; then USAGE="git foo" else USAGE=$(basename "$0") fi
该方式能避免父进程为Git但并非git foo调用的误判,精准度更高。
注意事项
- 不同系统的
ps参数存在细微差异,BSD/macOS环境中需注意清理输出空格。 - 若脚本被其他非Git脚本调用,会默认显示脚本本身名称,符合预期逻辑。
内容的提问来源于stack exchange,提问作者Sparr
相关产品推荐
相关产品推荐

