2017-10-10 43 views
0

我有一个Laravel Artisan命令,其效果很好,并且有一些交互式问题。它从命令行运行时效果很好。Laravel Artisan交互式提示不能从Git钩子工作

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

我下面的代码:

#!/bin/bash 
php artisan some:command 
+0

你在什么操作系统上尝试它...你可以分享你的代码的一部分?日志文件中是否有任何错误。你用命令行做什么,bash也是CL。 – Webdesigner

+0

对不起,在 – kratos

+0

之上添加更新我是否理解你的权利,你想要做的事'git push production' from local host和git应该用您的git钩子上的artisan命令的命令提示符进行响应?或者你想做什么? – Webdesigner

回答

1

的Git执行非交互的shell的钩子脚本,所以脚本的标准输入没有连接到终端。我们可以重定向终端钩子脚本的过程,所以我们可以用下面的命令交互:

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