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 交互的工具,我们可能会遇到问题。
我有一个 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 交互的工具,我们可能会遇到问题。