You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测Git自定义命令脚本是否以`git foo`方式调用?

解决Git自定义命令脚本的调用显示问题

方法一:通过父进程判断

在Shell脚本中,可通过获取父进程信息区分调用方式:

  1. 获取当前脚本的父进程ID:
PPID=$(ps -o ppid= -p $$ | tr -d ' ')
  1. 获取父进程的命令名称:
PARENT_CMD=$(ps -o comm= -p "$PPID" | tr -d ' ')
  1. 根据父进程类型设置显示内容:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 23:34:58