2013-04-26 152 views
0

在一個大的Makefile託管項目中,我最近添加了一些PHP生成的目標和bash完成停止工作:按[tab]不會觸發完成,但會插入製表符。Makefile bash自動完成問題與PHP生成的目標

我孤立的問題,這個簡單的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 [email protected] 

如果我使用目標宏的bash的回波,Python或Ruby版本,bash補全工作正常,但如果我使用的PHP版本bash完成變得毫無用處。

我可以重現這個問題:

  • 的Mac OS 10.7.5使用默認的/ usr/bin中/ PHP(5.3.15),默認/斌/慶典(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) - 發佈),默認bash-完成1:1.1-3ubuntu2

有沒有人知道什麼事情出了問題,可以做些什麼呢?

+1

相關的問題在http://stackoverflow.com/questions/3617492/tab-autocompletion-in-bash-using-php – Stefaan 2013-04-26 14:14:08

回答

1

好了,做了一些更多的研究和谷歌上搜索,發現了一個解釋的解決方法在:

顯然readline的支持PHP(PHP CLI與libedit上的readline支持編譯Ubuntu Lucid)以某種方式導致問題(未由Paul Serby分析),解決方法是顯式控制PHP進程的標準輸入。

例如:

TARGETS = $(php -r 'echo "target1 target2";' < /dev/null) 

TARGETS = $(echo '' | php -r 'echo "target1 target2";') 

這兩種解決方案在兩個平臺我想上工作。

更多參考: