Bash завершение цели makefile
Предположим, что у меня есть простой make файл, например:
hello:
echo "hello world"
bye:
echo "bye bye"
Затем в bash мне нужно что-то вроде:
сделать h < вкладкa >
чтобы он мог завершиться до
приветствовать
Я нашел простой способ создания пустых файлов hello
и bye
, но я ищу что-то более сложное.
Ответы
Ответ 1
Может ли это быть то, что вы ищете?
http://freshmeat.net/projects/bashcompletion/
сделать [Tab] завершено на всех цели в Makefile. Этот проект был предназначен для создания программируемых процедуры завершения для большинства общие команды Linux/UNIX, уменьшая количество вводимых системных администраторов и программистам нужно делать ежедневно основа.
Ответ 2
Добавьте это в свой ~/.bash_profile файл или ~/.bashrc файл
complete -W "\'grep -oE '^[a-zA-Z0-9_.-]+:([^=]|$)' ?akefile | sed 's/[^a-zA-Z0-9_.-]*$//'\'" make
Это ищет цель в вашем Makefile под названием "Makefile" или "makefile" (обратите внимание на подстановочный знак ?
в ?akefile
), используя grep, и передает ее команде complete
в bash, которая используется указать, как аргументы автоматически заполняются. Флаг -W
обозначает, что входные данные для команды complete
будут списком слов, который выполняется путем передачи результатов grep через sed
, который упорядочивает его в желаемый формат списка слов.
Предостережения и ошибки:
Ваш make файл называется "GNUMakefile" или что-то еще, кроме "Makefile" или "makefile". Если вы часто сталкиваетесь с такими заголовками, подумайте об изменении соответствующего регулярного выражения ?akefile
.
Забыть источник вашего файла ~/.bash_profile или ~/.bashrc после внесения изменений. Я добавляю эту, казалось бы, тривиальную деталь, поскольку для непосвященных она незнакома.
Чтобы изменения в ваших bash файлах вступили в силу, поставьте их с помощью команды
source ~/.bashrc
или
source ~/.bash_profile
PS. Теперь у вас также есть добавленная возможность отображать возможные цели создания, дважды нажав [Tab], как при завершении bash. Просто убедитесь, что вы добавили пробел после команды make, прежде чем дважды вводить [Tab].
Ответ 3
Похоже, что это по умолчанию, по крайней мере, Debian Lenny:
$ grep Makefile /etc/bash_completion
# make reads `GNUmakefile', then `makefile', then `Makefile'
elif [ -f ${makef_dir}/Makefile ]; then
makef=${makef_dir}/Makefile
# before we scan for targets, see if a Makefile name was
# deal with included Makefiles
В заголовке этого файла указано:
# The latest version of this software can be obtained here:
#
# http://bash-completion.alioth.debian.org/
#
# RELEASE: 20080617.5
Ответ 4
Существует полезный пакет под названием bash-creation, доступный для большинства каждой ОС. Включает завершение Makefile.
(Если вы используете macOS и Homebrew, вы можете получить это через brew install bash-completion
.)
Ответ 5
В Ubuntu 10.04 введите следующий файл:
. /etc/bash_completion
или раскомментируйте его в
/etc/bash.bashrc