PHP生成目标的Makefile bash自动完成问题

时间:2013-04-26 09:39:49

标签: php bash makefile bash-completion

在一个大型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完成变得无用。

我可以在:

重现此问题
  • Mac OS 10.7.5,默认为/ usr / bin / php(5.3.15),默认为/ bin / bash(3.2.48(1)-release),bash_completion 1.3_4(随macports安装)
  • Ubuntu 10.04,默认为/ usr / bin / php(5.3.5-1ubuntu4ppa1),默认/ bin / bash(4.1.5(1)-release),默认bash-completion 1:1.1-3ubuntu2

有人知道出了什么问题以及可以做些什么吗?

1 个答案:

答案 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";' )

这两个解决方案都适用于我尝试的两个平台。

进一步参考: