【问题标题】:Laravel Artisan interactive prompts do not work from Git hookLaravel Artisan 交互式提示在 Git 钩子中不起作用
【发布时间】:2018-03-21 23:10:19
【问题描述】:

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

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

我的代码如下:

#!/bin/bash
php artisan some:command

【问题讨论】:

  • 你在什么操作系统上尝试它...你能分享你的代码的一部分吗?您的日志文件中是否有任何错误。命令行是什么意思,bash也是CL。
  • 抱歉在上面添加了更新
  • 我理解你的意思吗,你想做例如来自本地主机和 git 的 git push production 应该使用您在 git 钩子上完成的工匠命令的命令提示符进行响应?或者你想做什么?
  • 检查运行该文件的命令。可能有输出重定向。

标签: php git bash laravel laravel-artisan


【解决方案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 交互的工具,我们可能会遇到问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2021-03-01
    • 2012-06-06
    • 1970-01-01
    • 2021-03-10
    • 2019-08-14
    相关资源
    最近更新 更多