Чтобы ответить на первую часть вашего вопроса, я думаю, что большинство людей не хотели бы, чтобы Bash предлагал файлы в рабочем каталоге в качестве рекомендуемых целей для make.
Но вы можете настроить поведение без особых проблем.
Некоторые полезные документы по Bash Tab Completion можно найти здесь .
Похоже, что исходный код Bash Completion, используемый в Mac OS X, здесь здесь.Вот строка, которая вас волнует:
COMPREPLY=( $( compgen -W "$( make -qp $makef $makef_dir 2>/dev/null | \
awk -F':' '/^[a-zA-Z0-9][^$#\/\t=]*:([^=]|$)/ \
{split($1,A,/ /);for(i in A)print A[i]}' )" \
-- "$cur" ) )
Вы можете видеть, что встроенная в нее compgen
генерирует список возможных завершений на основе вывода make -qp Makefile .
.
Вы можете взломать это, чтобы работать так, как вы этого хотите.Сначала скопируйте файл автозаполнения, относящийся к марке, в свой файл завершения bash:
cp /usr/local/Cellar/bash-completion/1.3_3/etc/bash_completion.d/make ~/.bash_completion
Затем отредактируйте этот файл, чтобы указать немного другое поведение.Здесь я покажу различие:
--- /usr/local/Cellar/bash-completion/1.3_3/etc/bash_completion.d/make 2019-02-06 18:35:00.000000000 +1100
+++ /Users/alexharvey/.bash_completion 2019-02-06 18:34:36.000000000 +1100
@@ -62,7 +62,7 @@
COMPREPLY=( $( compgen -W "$( make -qp $makef $makef_dir 2>/dev/null | \
awk -F':' '/^[a-zA-Z0-9][^$#\/\t=]*:([^=]|$)/ \
- {split($1,A,/ /);for(i in A)print A[i]}' )" \
+ {split($1,A,/ /);for(i in A)print A[i]}' ; ls * )" \
-- "$cur" ) )
fi
Обратите внимание, что все, что я сделал, это добавил вывод ls *
к ответу, возвращенному в compgen
, чтобы он считал файлы в рабочем каталогеТакже возможны вкладки дополнений.
И это все.Запустите новую оболочку.