在一个大型Makefile托管项目中,我最近添加了一些PHP生成的目标,并且bash完成停止工作:按[tab]不会触发完成,但会插入制表符。
我将问题隔离到这个最小的Makefile:
# TARGETS = $(echo target1 target2)
TARGETS = $(php -r 'echo "target1 target2";')
# TARGETS = $(python -c 'print "target1 target2"')
# TARGETS = $(ruby -e 'puts "target1 target2"')
$(TARGETS):
echo $@
如果我使用TARGETS宏的bash-echo,python或ruby版本,bash完成按预期工作,但如果我使用php版本bash完成变得无用。
我可以在:
重现此问题有人知道出了什么问题以及可以做些什么吗?
答案 0 :(得分:1)
好的,做了一些更多的研究和谷歌搜索,找到了一个解决方法:
显然PHP中的readline支持(带有libedit的PHP CLI,用于Ubuntu Lucid上的readline支持)以某种方式导致问题(Paul Serby没有分析),解决方法是明确控制标准输入PHP流程。
例如:
TARGETS = $(php -r 'echo "target1 target2";' < /dev/null )
或
TARGETS = $(echo '' | php -r 'echo "target1 target2";' )
这两个解决方案都适用于我尝试的两个平台。
进一步参考: