如何在Git挂钩脚本中检测GUI应用是否正在启动提交? 只要您不问“为什么要这么做?”

问题描述

可以跳过的背景

(只要您不问“为什么要这么做?”)

过去我主要使用Git的命令行,但是Fork具有一些其他GUI Git客户端中没有的工具 1 ,因此我开始使用它来补充外壳中的Git。但是,这给我的prepare-commit-msg钩子脚本带来了一个问题,该脚本在终端设备 2 显示一个基于fzf的UI,这会中断Fork。

TLDR:

我希望prepare-commit-msg挂钩脚本能够检测到GUI应用程序何时触发了它,因此我可以避免在脚本中显示选择UI,因为这会阻止Fork正常工作。

有什么方法可以检测到吗?

我正在使用Zsh,但如果尚未按原样运行,则任何可以在Bash中运行的解决方案都可以进行调整。


1 方法是提供一个非常好的交互式变基编辑器(您可以在标记它们的同时查看提交中的代码 进行修复,编辑,压缩,删除或其他操作),并提供了一个非常不错的历史记录浏览器。

2 用于从主题组织的列表中选择表情符号,从而使提交消息具有快速而有意义的视觉提示,从而使扫描它们更加容易。 (我不喜欢gitmoji等现有的表情符号管理器,因此我基本上按照自己想要的方式进行了滚动工作。)

解决方法

听起来您对是否由GUI应用程序启动提交不感兴趣,而对提交时终端是否可用从而可以向用户显示内容的兴趣不大。在这种情况下,您要使用的程序是tty,它将确定标准输入是否为终端。

您将使用如下形式(便携式POSIX sh):

#!/bin/sh

# No terminal? No problem.
tty >/dev/null 2>&1 || exit 0

# Interact with the user here.