【问题标题】:Makefile bash autocompletion issue with PHP generated targetsPHP生成的目标的Makefile bash自动完成问题
【发布时间】:2013-04-20 10:39:05
【问题描述】:

在一个大型 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 $@

如果我使用 bash-echo、python 或 ruby​​ 版本的 TARGETS 宏,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

有人知道出了什么问题以及可以采取什么措施吗?

【问题讨论】:

标签: php bash makefile bash-completion


【解决方案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";' )

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

更多参考资料:

【讨论】:

    猜你喜欢
    • 2011-05-10
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 2017-04-17
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    相关资源
    最近更新 更多