Laravel Artisan交互式提示不适用于Git钩子

时间:2017-10-10 13:50:15

标签: php git bash laravel artisan

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

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

我的代码如下:

#!/bin/bash
php artisan some:command

1 个答案:

答案 0 :(得分:1)

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 questionPOSIX spec

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