Laravel Artisan 交互式提示在 Git 挂钩中不起作用

Laravel Artisan interactive prompts do not work from Git hook

我有一个 Laravel Artisan 命令,效果很好,并且有一些交互式问题。当从命令行 运行 时效果很好。

但是,当从 Git 挂钩(Bash 脚本)调用时,它不会显示 "confirm" 或 "ask" 等交互式问题。我只需要知道 Artisan 命令在哪个上下文中 运行 以及我是否能够显示我的 "confirm" 或其他交互式问题。可能吗?

我的代码如下:

#!/bin/bash
php artisan some:command

Git 在非交互式 shell 中执行挂钩脚本,因此脚本的 stdin 未连接到终端。我们可以将终端重定向到钩子脚本的进程,以便我们可以与命令进行交互:

#!/bin/sh 
# This is a git hook.

# Connect terminal to STDIN...
exec < /dev/tty 

# Run any interactive commands...
php artisan some:command

# Close STDIN...
exec <&-

我们在此上下文中使用 exec 来控制脚本可用的文件描述符。有关 exec 的更多信息,请参阅 this question or the POSIX spec

此技术在命令行中应该可以正常工作。如果我们使用其他包装或与 git 交互的工具,我们可能会遇到问题。