0

大規模な 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 でインストール)
  • デフォルトの /usr/bin/php (5.3.5-1ubuntu4ppa1)、デフォルトの /bin/bash (4.1.5(1)-release)、デフォルトの bash-completion 1:1.1-3ubuntu2 の Ubuntu 10.04

何がうまくいかないのか、それに対して何ができるのか誰かが知っていますか?

4

1 に答える 1

1

OK、さらに調査とグーグル検索を行い、次の場所で回避策の説明を見つけました。

どうやら PHP での readline サポート (Ubuntu Lucid での readline サポート用に libedit をコンパイルした PHP CLI) が何らかの方法で問題を引き起こし (Paul Serby によって分析されていません)、回避策は PHP プロセスの標準入力を明示的に制御することです。

例えば:

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

また

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

どちらのソリューションも、私が試した両方のプラットフォームで動作します。

さらなる参考文献:

于 2013-04-26T14:07:24.957 に答える