我有一个很好的Laravel Artisan命令,并且有一些交互式问题。从命令行运行时它很有用。
但是,当从Git钩子(Bash脚本)调用时,它不会显示“确认”或“询问”等交互式问题。我只需要知道Artisan命令在哪个上下文中运行以及我是否能够显示我的“确认”或其他互动问题。有可能吗?
我的代码如下:
#!/bin/bash
php artisan some:command
答案 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
。
此技术应该可以在命令行中正常工作。如果我们使用其他工具来包装git或与git交互,我们可能会遇到问题。