2013-04-26 4 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] 

Если я использую Баш-эхо, питон или рубиновую версию макроса мишеней, завершение Баша работает, как ожидалось, но если я использую версию 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) -release), по умолчанию bash- завершение 1: 1.1-3ubuntu2

Неужели кто-то знает, что происходит не так, и что с этим можно сделать?

+1

родственный выпуск на http://stackoverflow.com/questions/3617492/tab-autocompletion-in-bash-using-php – Stefaan

ответ

1

Хорошо, сделал еще немного исследования и прибегая к помощи и нашли объяснение в обходной путь по адресу:

Видимо поддержка Readline в PHP (PHP CLI с Libedit скомпилирован в для Readline поддержки на Ubuntu Lucid) вызывает проблему в некотором роде (не анализируется Полом Серби), и обходной путь заключается в том, чтобы явно взять под контроль стандартный ввод процесса PHP.

Например:

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

или

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

оба решения работают на обеих платформах я пробовал.

Дополнительные ссылки:

 Смежные вопросы

  • Нет связанных вопросов^_^