2017-10-10 54 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交互的工具,我們可能會遇到問題。